分享

java成神之——date和calendar日期的用法

 印度阿三17 2018-09-29

Date和Calendar日期的用法

Date类

System.currentTimeMillis()  // 当前时间毫秒数

Date time = new Date();
time.getTime()              // 当前毫秒值
time.setTime(100000000)     // 根据毫秒值设置日期

java_util_Date和java_sql_Date的区别

java.util.Date类型的数据存到数据库需要转换成java.sql.Date

java.util.Date utilData = new java.util.Date();
java.sql.Date sqlData = new java.sql.Date(utilData.getTime());

SimpleDateFormat格式化时间

日期转字符串

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
    String formattedDate = simpleDateFormat.format(Calendar.getInstance().getTime()); // 2018/09/20 04:40.03

字符串转日期

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
    Date date = simpleDateFormat.parse("2018/09/20 04:40.03");

    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
    Date date = dateFormat.parse("2018/09/20");

DateFormat的几个属性

    SHORT       6/30/09 30/06/09
    MEDIUM      Jun 30, 2009 30 juin 2009
    LONG        June 30, 2009 30 juin 2009
    FULL        Tuesday, June 30, 2009 mardi 30 juin 2009

LocalDate

LocalDate用来获取系统默认时间

LocalDate lDate = LocalDate.now();                          // 2018-09-20 不包含时间信息
LocalDate lDate = LocalDate.of(2018, 9, 10);
LocalDate lDate = LocalDate.parse("2018-09-11");
LocalDate lDate = LocalDate.now(ZoneId.systemDefault());    // 根据系统默认时区获取时间

简单日期操作
LocalDate.now()                          // 2018-09-20
LocalDate.now().minusDays(1)             // 2018-09-19
LocalDate.now().plusDays(1);             // 2018-09-21
LocalDate.now().withMonth(6)             // 2018-06-20

LocalDateTime

LocalDateTime的参数含义

    LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);

LocalDateTime的使用

    LocalDateTime lDateTime = LocalDateTime.now();          // 2018-09-20T16:17:54.248780300
    LocalDateTime lDateTime = LocalDateTime.of(2018, 9, 10, 10, 30);
    LocalDateTime lDateTime = LocalDateTime.parse("2018-09-10T10:30");
    LocalDateTime lDateTime = LocalDateTime.now(ZoneId.systemDefault());

Date和LocalDate的相互转化

Date转换成LocalDate

    Date date = Date.from(Instant.now());
    LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate转换成Date
    
    LocalDate lDate = LocalDate.now();  
    Date date = Date.from(lDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Date和LocalDateTime的相互转化

Date转换成LocalDateTime

    Date date = Date.from(Instant.now());
    LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

LocalDateTime转换成Date

    LocalDateTime lDateTime = LocalDateTime.now();
    Date date = Date.from(lDateTime.atZone(ZoneId.systemDefault()).toInstant());

Calendar

用来获取日期的具体部分

    Calendar cd = Calendar.getInstance();
    int time = cd.get(Calendar.YEAR);           // 获取年份
    int time = cd.get(Calendar.MONTH)   1;      // 月份从0开始,获取月份
    int time = cd.get(Calendar.DAY_OF_MONTH);   // 获取天

用来设置日期的具体部分

    Calendar cd = Calendar.getInstance();
    cd.set(Calendar.MONTH, 8);                  // 设置月份为9月
    cd.set(1974, 6, 2, 8, 0, 0);
    cd.add(Calendar.DAY_OF_MONTH, 2);           // 时间偏移
    Date time = cd.getTime();                   // 将Calendar转化成Date类

GregorianCalendar

    Calendar calendar = Calendar.getInstance(); 
    Calendar calendar = new GregorianCalendar(); 
    Calendar calendar = new GregorianCalendar(2016, Calendar.JANUARY, 1);
    Calendar calendar = new GregorianCalendar(2016, Calendar.JANUARY, 1, 6, 55, 10);

    calendar.add(Calendar.MONTH, -6);  // 改变日期
    calendar.roll(Calendar.MONTH, -1); // 改变日期的某一部分,其他字段不变
    calendar.get(Calendar.AM_PM)       // 获取某一日期部分

before_after_compareTo_equals

用来判断时间超前还是落后

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
Date date = simpleDateFormat.parse("2018/09/20 04:40.03");
Date date1 = simpleDateFormat.parse("2018/09/21 04:40.03");
date.after(date1)           // false
date.before(date1)          // true

用来判断时间是否相等

date.compareTo(date1)       // -1 返回的是日期对比的order,返回0表示相等、-1表示小、1表示大
date.equals(date1)          // false 

清空MILLISECOND

clear方法最好只用来清空MILLISECOND,其他的日期部分可能没作用

Calendar c = Calendar.getInstance();

System.out.println(c.getTimeInMillis());        // 1537442289490

c.set(Calendar.MILLISECOND, 22);

System.out.println(c.getTimeInMillis());        // 1537442289022

c.clear(Calendar.MILLISECOND);

System.out.println(c.getTimeInMillis());        // 1537442289000

isBefore_isAfter_compareTo_equals

LocalDate lDate1 = LocalDate.of(2018, 9, 20);
LocalDate lDate2 = LocalDate.of(2012, 9, 19);
lDate1.isAfter(lDate2);         //true
lDate1.isBefore(lDate2);        //false
lDate1.compareTo(lDate2);       // -1 返回的是日期对比的order,返回0表示相等、-1表示小、1表示大
lDate1.equals(lDate2);          // false
lDate1.isEqual(lDate2);         // false

时区

TimeZone.getDefault().getDisplayName(); // 中国标准时间

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
sdf.setTimeZone(TimeZone.getTimeZone("China/Shang_Hai"));
System.out.println(sdf.format(date));                                   // 2018-09-20 11:44:22

sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date));                                   // 2018-09-20 12:44:22

时间差值

LocalDate d1 = LocalDate.of(2018, 9, 10).plusDays(1);
LocalDate d2 = LocalDate.of(2018, 9, 16).plusMonths(1);
long days = ChronoUnit.DAYS.between(d1, d2); // 35

Instant

Instant now = Instant.now(); // 2018-09-20T11:55:12.234452700Z

LocalTime

LocalTime localtime = LocalTime.now();                              // 20:03:57.909365400
LocalTime time1 = LocalTime.of(1, 0, 0);
LocalTime time2 = LocalTime.of(3, 1, 10);

time1和time2差值
    System.out.println( time1.until(time2, ChronoUnit.MINUTES) );       // 121
    System.out.println( time1.until(time2, ChronoUnit.HOURS) );         // 2
    System.out.println( time1.until(time2, ChronoUnit.SECONDS) );       // 7270

    System.out.println( ChronoUnit.MINUTES.between(time1, time2) );     // 121
    System.out.println( ChronoUnit.HOURS.between(time1, time2) );       // 2
    System.out.println( ChronoUnit.SECONDS.between(time1, time2) );     // 7270

时区
    ZoneId zone = ZoneId.of("Asia/Shanghai");
    LocalTime time1 = LocalTime.now();
    LocalTime time2 = LocalTime.now(zone);
    LocalTime time3 = LocalTime.parse("20:10:30");

    时间差
    long timeDiff = Duration.between(time1, time3).toMinutes();
    long timeDiff1 = ChronoUnit.MINUTES.between(time1, time3);

    System.out.println(time1);                                          // 20:13:38.239060900
    System.out.println(time2);                                          // 20:13:38.239060900
    System.out.println(time3);                                          // 20:10:30
    System.out.println(timeDiff);                                       // -3
    System.out.println(timeDiff1);                                      // -3

结语

本文章是java成神的系列文章之一

如果你想知道,但是本文没有的,请下方留言

我会第一时间总结出来并发布填充到本文
来源:http://www./content-1-29301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多