Java中的时间与日期

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class InstantTest {
    public static void main(String[] args) {
        long timeNow = System.currentTimeMillis();
        System.out.println(timeNow);

        /**
         * java.util.Date
         */
        Date date = new Date();
        long currentTimeMillis = date.getTime();
        Date date2 = new Date(System.currentTimeMillis());
        //Fri Mar 16 20:53:25 CST 2018
        System.out.println(date);
        System.out.println(date.after(date2));
        System.out.println(date.before(date2));
        System.out.println(date.compareTo(date2));
        // 2018-03-16T12:53:25.828Z
        System.out.println(date.toInstant());

        /**
         * java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用
         * PreparedStatement的setDate()的参数和ResultSet的getDate()返回值的都是java.sql.Date
         *
         * java.sql.Date 是java.util.Date的派生类
         *
         * 对应了数据库的Date类型
         */
        java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
        // java.sql.Date只记录日期: 2018-03-16
        System.out.println(sqlDate);
        // 2018-03-16
        System.out.println(sqlDate.toLocalDate());

        /**
         * java.sql.Timestamp 是java.util.Date的派生类
         *
         * java.sql.Date没有时间部分,而java.sql.Timestamp保留了时间部分
         *
         * 对应了数据库的timestamp类型
         */
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        // 2018-03-16 21:06:20.128
        System.out.println(timestamp);
        // 获取的时间是以毫微秒为单位的,1秒等于十亿毫微秒
        System.out.println(timestamp.getNanos());

        /**
         * java.util.Calendar类适用于计算日期和时间
         * 跟时区有关
         */
        Calendar calendar = new GregorianCalendar();
        System.out.println(calendar);
        System.out.println(calendar.get(Calendar.YEAR));
        // 在Calendar中MONTH这个域并不是从1到12的,而是从0表示一月,11表示十二月.
        System.out.println(calendar.get(Calendar.MONTH));
        // 星期是如你预料的一般从1到7的,但是星期天才是一周的第1天,星期一是第2天,依次类推.
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        // 获取时区
        TimeZone timeZone = calendar.getTimeZone();
        System.out.println(timeZone);
        // 返回默认的时区,即系统当前时区
        System.out.println(TimeZone.getDefault().getID());

        /**
         * Date 和 String
         *
         * java.text.SimpleDateFormat
         */
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateToString = simpleDateFormat.format(new Date());
        System.out.println(dateToString);
        try {
            Date StringToDate = simpleDateFormat.parse("2018-03-16 21:35:17");
            System.out.println(StringToDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        /**
         * JDK8
         * java.time.Instant: 统计时间
         *
         * 和java.sql.Timestamp有点类似
         */
        Instant now = Instant.now();
        // 2018-03-16T13:41:19.583Z
        System.out.println(now);
        // 1521207679
        System.out.println(now.getEpochSecond());
        // 583000000
        System.out.println(now.getNano());
        Instant later = now.plusSeconds(3);
        Instant earlier = now.minusSeconds(3);
        // later: 1521207682,earlier: 1521207676
        System.out.println("later: " + later.getEpochSecond() + "," + "earlier: " + earlier.getEpochSecond());

        /**
         * JDK8
         * java.time.Duration: 表示两个Instant间的一段时间
         *
         * 一个Duration对象里有两个域:纳秒值(小于一秒的部分),秒钟值(一共有几秒)
         *
         */
        Instant first = Instant.now();
        // wait some time while something happens
        Instant second = Instant.now();
        Duration duration = Duration.between(first, second);
        // 转换整个时间
        System.out.println(duration.toNanos());
        // 获取纳秒值部分
        System.out.println(duration.getNano());
        // 获取秒钟值部分
        System.out.println(duration.abs().getSeconds());

        /**
         * LocalDate类是Java 8中日期时间功能里表示一个本地日期的类,它的日期是无时区属性的。
         * 可以用来表示生日、节假日期等等。这个类用于表示一个确切的日期,而不是这个日期所在的时间。
         *
         * 和java.util.Calendar进行比较
         */
        LocalDate localDate = LocalDate.now();
        LocalDate localDate2 = LocalDate.of(2015, 12, 31);
        // 2018-03-16,2015-12-31
        System.out.println(localDate + "," + localDate2);
        int year = localDate.getYear();
        // 返回枚举类型
        Month month = localDate.getMonth();
        int dayOfMonth = localDate.getDayOfMonth();
        int dayOfYear  = localDate.getDayOfYear();
        DayOfWeek dayOfWeek = localDate.getDayOfWeek();

        /**
         * LocalTime类是Java 8中日期时间功能里表示一整天中某个时间点的类,它的时间是无时区属性的。
         */
        LocalTime localTime = LocalTime.now();
        LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);
        // 22:00:48.771,21:30:59.000011001
        System.out.println(localTime + "," + localTime2);

        /**
         * LocalDateTime类是Java 8中日期时间功能里,用于表示当地的日期与时间的类,它的值是无时区属性的。
         * 可以将其视为Java 8中LocalDate与LocalTime两个类的结合。
         */
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime localDateTime2 = LocalDateTime.of(2015, 11, 26, 13, 55,
                36, 123);
        // 2015-11-26T13:55:36.000000123
        System.out.println(localDateTime2);

        /**
         * ZonedDateTime类是Java 8中日期时间功能里,用于表示 带时区 的日期与时间信息的类。
         * 可以用于表示一个真实事件的开始时间,如某火箭升空时间等等。
         */
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        // 时区是用ZoneId类表示的,你可以使用ZoneId.now()或ZoneId.of(“xxx”)来实例化
        ZoneId zoneId = ZoneId.of("UTC+1");
        ZonedDateTime zonedDateTime2 = ZonedDateTime.of(2015, 11, 30, 23, 45,
                59, 1234, zoneId);
        // 2015-11-30T23:45:59.000001234+01:00[UTC+01:00]
        System.out.println(zonedDateTime2);

        /**
         * java.time.format.DateTimeFormatter
         * DateTimeFormatter类是Java 8中日期时间功能里,用于解析和格式化日期时间的类,位于java.time.format包下.
         * DateTimeFormatter类包含一系列预定义(常量)的实例,可以解析和格式化一些标准时间格式
         */
        DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
        String formattedDate = formatter.format(LocalDate.now());
        // 20180316
        System.out.println(formattedDate);
        // 20180316+0800
        System.out.println(formatter.format(ZonedDateTime.now()));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值