Java 8: LocalDate、LocalTime 、LocalDateTime 处理日期时间

阳光穿透心脏的1/2处 2024-04-19 08:35 138阅读 0赞

JDK8中,新增了三个类,用以处理时间。

LocalDate专门处理日期,LocalTime专门处理时间,LocalDateTime包含了日期和时间,而且对于很多复杂的问题,都提供了现成的方法,比如:获取2017年12月的第一个周一等。

  1. package test;
  2. import java.time.DayOfWeek;
  3. import java.time.LocalDate;
  4. import java.time.LocalDateTime;
  5. import java.time.LocalTime;
  6. import java.time.temporal.TemporalAdjusters;
  7. import java.util.Calendar;
  8. /**
  9. * Created by lightClouds917
  10. * Date 2017/11/6
  11. * Description:Java8中处理时间和日期的类
  12. *
  13. SQL -> Java
  14. --------------------------
  15. date -> LocalDate
  16. time -> LocalTime
  17. timestamp -> LocalDateTime
  18. */
  19. public class DateTest2 {
  20. public static void main(String[] args){
  21. test1();
  22. test2();
  23. Calendar calendar = Calendar.getInstance();
  24. System.out.println(calendar.getTime());
  25. }
  26. /**
  27. * 处理日期 LocalDate
  28. */
  29. public static void test1(){
  30. //获取当前日期 2017-11-06
  31. LocalDate today = LocalDate.now();
  32. System.out.println(today);
  33. //构造日期 2017-10-08
  34. LocalDate today2 = LocalDate.of(2017,10,8);
  35. System.out.println(today2);
  36. //构造日期 2017-02-22 字符串严格按照yyyy-MM-dd
  37. LocalDate today3 = LocalDate.parse("2017-02-22");
  38. System.out.println(today3);
  39. //本月第一天 2017-11-01
  40. LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
  41. System.out.println(firstDayOfMonth);
  42. //本月第二天 2017-11-02 第n天
  43. LocalDate secondDayOfMonth = today.withDayOfMonth(2);
  44. System.out.println(secondDayOfMonth);
  45. //本月最后一天 2017-02-28 方便解决任何年份的二月份多少天
  46. LocalDate lastDayOfMonth = today3.with(TemporalAdjusters.lastDayOfMonth());
  47. System.out.println(lastDayOfMonth);
  48. //获取2017年12月的第一个周一 2017-12-04
  49. LocalDate firstDayOf201712 = LocalDate.parse("2017-12-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
  50. System.out.println(firstDayOf201712);
  51. }
  52. /**
  53. * 处理时间 LocalTime
  54. */
  55. public static void test2(){
  56. //获取当前时间 含有毫秒值 17:18:41.571
  57. LocalTime now = LocalTime.now();
  58. System.out.println(now);
  59. //获取当前时间 去掉毫秒值 17:45:41
  60. LocalTime now1 = LocalTime.now().withNano(0);
  61. System.out.println(now1);
  62. //00:46:46.651 提供了把时分秒都设为0的方法
  63. LocalTime now2 = LocalTime.now().withHour(0);
  64. System.out.println(now2);
  65. //构造时间 00:20:55
  66. LocalTime time1 = LocalTime.of(0,20,55);
  67. System.out.println(time1);
  68. //构造时间 05:43:22
  69. LocalTime time2 = LocalTime.parse("05:43:22");
  70. System.out.println(time2);
  71. //标准时间 2017-11-06T17:53:15.930
  72. LocalDateTime lt = LocalDateTime.now();
  73. System.out.println(lt);
  74. }
  75. }

及:

  1. public class TimeTest {
  2. @Test
  3. public void testTime() {
  4. LocalDateTime time = LocalDateTime.now();
  5. System.out.println(time.toString()); //字符串表示
  6. System.out.println(time.toLocalTime()); //获取时间(LocalTime)
  7. System.out.println(time.toLocalDate()); //获取日期(LocalDate)
  8. System.out.println(time.getDayOfMonth()); //获取当前时间月份的第几天
  9. System.out.println(time.getDayOfWeek()); //获取当前周的第几天
  10. System.out.println(time.getDayOfYear()); //获取当前时间在该年属于第几天
  11. System.out.println(time.getHour());
  12. System.out.println(time.getMinute());
  13. System.out.println(time.getMonthValue());
  14. System.out.println(time.getMonth());
  15. System.out.println("-----------------------------------");
  16. //格式化输出
  17. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY/MM/dd HH:mm:ss");
  18. System.out.println(time.format(formatter));
  19. //构造时间
  20. LocalDateTime startTime = LocalDateTime.of(2018, 1, 1, 20, 31, 20);
  21. LocalDateTime endTime = LocalDateTime.of(2018, 1, 3, 20, 31, 20);
  22. //比较时间
  23. System.out.println(time.isAfter(startTime));
  24. System.out.println(time.isBefore(endTime));
  25. //时间运算,相加相减
  26. System.out.println(time.plusYears(2)); //加2年
  27. System.out.println(time.plusDays(2)); //加两天
  28. System.out.println(time.minusYears(2)); //减两年
  29. System.out.println(time.minusDays(2)); //减两天
  30. //获取毫秒数(使用Instant)
  31. System.out.println(time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
  32. //获取秒数(使用Instant)
  33. System.out.println(time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond());
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,138人围观)

还没有评论,来说两句吧...

相关阅读