java.time时间/日期API

http://blog.csdn.net/zero__007/article/details/50573858  

在Java SE 8中,添加了一个新包:java.time,它提供了结构良好的API来处理时间和日期。如果熟悉Joda Time,它将很容易掌握。

       在Java刚刚发布,也就是版本1.0的时候,对时间和日期仅有的支持就是java.util.Date类。大多数开发者对它的第一印象就是,它根本不代表一个“日期”。实际上,它只是简单的表示一个,从1970-01-01开始计时的,精确到毫秒的瞬时点。由于标准的toString()方法,按照JVM的默认时区输出时间和日期,有些开发人员把它误认为是时区敏感的。
       在升级Java到1.1期间,Date类被认为是无法修复的。由于这个原因,java.util.Calendar类被添加了进来。悲剧的是,Calendar类并不比java.util.Date好多少。它们面临的部分问题是:
       •  可变性。像时间和日期这样的类应该是不可变的。
       •  偏移性。Date中的年份是从1900开始的,而月份都是从0开始的。
       •  命名。Date不是“日期”,而Calendar也不真实“日历”。
       •  格式化。格式化只对Date有用,Calendar则不行。另外,它也不是线程安全的。

新的API:java.time,由5个包组成:
       java.time – 包含值对象的基础包
       java.time.chrono – 提供对不同的日历系统的访问
       java.time.format – 格式化和解析时间和日期
       java.time.temporal – 包括底层框架和扩展特性
       java.time.zone – 包含时区支持的类

日期

       在新的API中,LocalDate是其中最重要的类之一。它是表示日期的不可变类型,不包含时间和时区。
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. LocalDate date = LocalDate.of(2016, Month.JANUARY, 24);  
  2. int year = date.getYear(); // 2016  
  3. Month month = date.getMonth(); // 1月  
  4. int dom = date.getDayOfMonth(); // 24  
  5. DayOfWeek dow = date.getDayOfWeek(); // 星期天,SUNDAY  
  6. int len = date.lengthOfMonth(); // 31 (1月份的天数)  
  7. boolean leap = date.isLeapYear(); // true (是闰年)  
  8.   
  9. date = date.withYear(2015); // 2015-01-24  
  10. date = date.plusMonths(2); // 2015-03-24  
  11. date = date.minusDays(1); // 2015-03-23  

时间

       本地时间,LocalTime。LocalTime是值类型,且跟日期和时区没有关联。当对时间进行加减操作时,以午夜基准,24小时一个周期。因此,20:00加上6小时,结果就是02:00。
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. LocalTime time = LocalTime.of(2030);  
  2. int hour = time.getHour(); // 20  
  3. int minute = time.getMinute(); // 30  
  4. time = time.withSecond(6); // 20:30:06  
  5. time = time.plusMinutes(3); // 20:33:06  

时间和日期组合

       LocalDateTime类只是LocalDate和LocalTime的简单组合。它表示一个跟时区无关的日期和时间。LocalDateTime可以直接创建,或者组合时间和日期。
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. LocalDateTime dt1 = LocalDateTime.of(2016, Month.JANUARY, 102030);  
  2. LocalDateTime dt2 = LocalDateTime.of(date, time);  
  3. LocalDateTime dt3 = date.atTime(2030);  
  4. LocalDateTime dt4 = date.atTime(time);  
       LocalDateTime的其他方法跟LocalDate和LocalTime相似。这种相似的方法模式非常有利于API的学习。下面总结了用到的方法前缀:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. of: 静态工厂方法,从组成部分中创建实例  
  2. from: 静态工厂方法,尝试从相似对象中提取实例。from()方法没有of()方法类型安全  
  3. now: 静态工厂方法,用当前时间创建实例  
  4. parse: 静态工厂方法,总字符串解析得到对象实例  
  5. get: 获取时间日期对象的部分状态  
  6. is: 检查关于时间日期对象的描述是否正确  
  7. with: 返回一个部分状态改变了的时间日期对象拷贝  
  8. plus: 返回一个时间增加了的、时间日期对象拷贝  
  9. minus: 返回一个时间减少了的、时间日期对象拷贝  
  10. to: 把当前时间日期对象转换成另外一个,可能会损失部分状态  
  11. at: 用当前时间日期对象组合另外一个,创建一个更大或更复杂的时间日期对象  
  12. format: 提供格式化时间日期对象的能力  

时间格式化

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss");  
  2. LocalDateTime dateTime = LocalDateTime.now();  
  3. String string = formatter.format(dateTime);  
  4. System.out.println(string);  
  5.   
  6. DateTimeFormatter formatter1=DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss");  
  7. LocalDateTime dateTime1 = LocalDateTime.parse("20160124-15:03:59", formatter1);  
  8. System.out.println(dateTime1);  

猜你喜欢

转载自blog.csdn.net/salonzhou/article/details/50777463