zoukankan      html  css  js  c++  java
  • java处理日期和时间

    java处理日期和时间

    1. jdk API

    java.util

    • Date
    • Calendar

    java.time(jdk>=1.8)

    • LocalDate
    • LocalTime
    • ZonedDateTime
    • Instant

    新API的特点:

    • 严格区分日期,时间
    • 不变类(类似于String)
    • Month范围1-12(Jan-Dec)
    • Week范围1-7(Mon-Sun)

    2. Date

    注意: import java.util而不是importjava.sql

    2.1Date对象的主要方法

    • toString() 把Date对象变成字符串
    • getTime()把Date对象转换成时间戳
    Date now = new Date();
    System.out.println(now);
    System.out.println(now.toString());// 把now转换成字符形式
    System.out.println(now.getTime());// 通过now获取时间戳
    

    结果:

    Wed Jun 05 14:03:26 CST 2019
    Wed Jun 05 14:03:26 CST 2019
    1559714606831
    

    java.util.Date的问题:

    • 不能转换时区
    • 日期和时间的加减
    • 两个日期相差多少天
    • 计算某个月第一个星期一

    2.2 SimpleDateFormat

    yyyy: 年

    MM: 月

    dd: 日

    HH: 时

    mm: 分

    ss: 秒

    Date now = new Date();
    // 把Date按照格式转换成字符串
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(now));
    
    // 把字符串按照格式转换成Date对象
    String s1 = "2016-11-20 12:15:35";
    Date date1 = sdf.parse(s1);
    System.out.println(date1);
    

    3. Calendar(日历)

    导入: import java.util.Calendar

     // 创建实例
    Calendar c = Calendar.getInstance();
    int y = c.get(Calendar.YEAR);
    int m = c.get(Calendar.MONTH);// 得到的月份比实际月份小1
    int d = c.get(Calendar.DAY_OF_MONTH);
    int w = c.get(Calendar.DAY_OF_WEEK);
    int hh = c.get(Calendar.HOUR_OF_DAY);
    int mm = c.get(Calendar.MINUTE);
    int ss = c.get(Calendar.SECOND);
    int ms = c.get(Calendar.MILLISECOND);
    Date date = c.getTime();
    // 获得时间戳
    long ms1 = c.getTimeInMillis();
    
    • Date c.getTime() 获得Date对象
    • long getTimelnMillis() 获得毫秒数
    • get(int field) 获得年月日, 时分秒
    • setTime(Date) 设定时间
    • setTimeInMillis(long) 根据时间戳设置时间
    • set(int field, int value) 根据年月日等设定时间
    • setTimeZone(TimeZone) 更改时区

    c.setTimeZone(TimeZone.getTimeZone("America/New_York"))

    • add(int field, int value)
    // +5 day
    c.add(Calendar.DAY_OF_MONTH, 5);
    // -2 hours
    c.add(Calendar.HOUR_OF_DAY, -2);
    

    4. LocalDateTime

    4.1 获取当前日期和时间

    • LocalDate
    • LocalTime
    • LocalDateTime
    // 当前日期
    LocalDate ld = LocalDate.now();
    // 当前时间
    LocalTime lt = LocalTime.now();
    // 当前日期和时间
    LocalDateTime ldt = LocalDateTime.now();
    
    // 指定日期和时间
    LocalDate ld2 = LocalDate.of(2016, 11, 30);
    LocalTime lt2 = LocalTime.of(15, 16, 17);
    LocalDateTime ldt2 = LocalDateTime.of(2016, 11, 30, 15, 16, 17);
    LocalDateTime ldt3 = LocalDateTime.of(ld2, lt2);
    

    4.2 DateTimeFormatter

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(dtf.format(LocalDateTime.now()));
    LocalDateTime dt3 = LocalDateTime.parse("2016-12-30 15:16:17", dtf);
    System.out.println(dt3);//2016-12-30T15:16:17
    

    4.3 日期和时间的运算

    增加:

    • plusYears(1): +1年
    • plusMonths(1): +1月
    • plusDays(1): +1天
    • plusHours(1): +1小时
    • plusMinutes(1): +1 分钟
    • plusSeconds(1): +1 秒

    减少

    • minusYears(1): +1年
    • minusMonths(1): +1月
    • minusDays(1): +1天
    • minusHours(1): +1小时
    • minusMinutes(1): +1 分钟
    • minusSeconds(1): +1 秒
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime d = now.plusDays(1).minusHours(1);
    

    调整年, 月,日, 时, 分, 秒

    • withYear(2018): 调整年
    • withMonth(): 调整月
    • withDayOfMonth(): 调整为本月的第几天
    • withDayOfYear(): 调整本年的第几天
    • withHour(): 调整小时
    • withMinute(): 调整分钟
    • withSecond(): 调整秒

    判断日期和时间的先后:

    • isBefore()
    • isAfter()
    • equals()

    计算两个日期的相差时间:Period

    	LocalDate d1 = LocalDate.of(2018, 11, 20);
    	LocalDate d2 = LocalDate.of(2050, 1, 2);
    	Period p = d1.until(d2);
    	System.out.println(p);// P31Y1M13D  
    	// 两个日期相差多少天
    	System.out.println(Math.abs(d1.toEpochDay() - d2.toEpochDay()));// 11366
    
    • p.getYears()
    • p.getMonths()
    • p.getDays()

    5. ZonedDateTime

    ZonedDateTime = LocalDateTime + ZoneId

    • ZonedDateTime: 带时区的日期和时间
    • ZoneId: 新时区对象(取代就的java.util.TimeZone)
    • Instant: 时刻对象(内部用long表示epoch seconds)
    ZonedDateTime zbj = ZonedDateTime.now();// 当前时区的日期和时间
    ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));// 纽约时区的日期和时间
    // 北京时区变成纽约时区
    ZonedDateTime ny = zbj.withZoneSameInstant(ZoneId.of("America/New_York"));
    // 把LocalDateTime转换成ZonedDateTime
    ZonedDateTime bj = LocalDateTime.now().atZone(ZoneId.systemDefault());
    
    

    Instant: 对象表示某个时刻

    Instant ins1 = Instant.now();
    Instant ins2 = ZonedDateTime.now().toInstant();
    // 注意是秒
    long epoch = ins1.getEpochSecond();
    
  • 相关阅读:
    由于可能不会将凭据发送到远程计算机,因此将不会进行连接。若要获得协助,请与您的系统管理员联系。
    URL编码与解码
    linux服务器openjdk11环境easypoi导出excel报错(class sun.font.CompositeFont cannot be cast to class sun.font.PhysicalFont)
    解决Drools中文乱码
    CISSP-什么是安全冠军以及您为什么需要安全冠军
    windows环境中JDK环境变量配置
    【Django】定时任务
    【Django】权限之has_perm
    一些连接
    数据库
  • 原文地址:https://www.cnblogs.com/lingshang/p/10980288.html
Copyright © 2011-2022 走看看