-
JDK8 新增的日期时间API
2020-03-20 12:33:29LocalDate:不包含具体时间的日期。 LocalTime:不含日期的时间。 LocalDateTime:包含了日期及时间。 一、获取时间 (1)Instant(时间戳类) JDK8获取时间戳特别简单。Instant类由一个静态的工厂方法now()可以返回...新的时间及日期API位于 java.time 包中,下面是一些关键类。
Instant:代表的是时间戳。
LocalDate:不包含具体时间的日期。
LocalTime:不含日期的时间。
LocalDateTime:包含了日期及时间。
一、获取时间
(1)Instant(时间戳类)
JDK8获取时间戳特别简单。Instant类由一个静态的工厂方法now()可以返回当前时间戳。Instant instant = Instant.now(); System.out.println("当前时间戳是:" + instant);//当前时间戳是:2018-09-06T10:14:29.460Z Date date = Date.from(instant); System.out.println("当前时间戳是:" + date);//当前时间戳是:Thu Sep 06 18:14:29 CST 2018 instant = date.toInstant();
可以看到,当前时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是JDK8以前的Date,可以使用这两个类中的方法在这两个类型之间进行转换。
(2)LocalDate
LocalDate类获取日期信息。格式为 2018-09-06LocalDate nowDate = LocalDate.now(); System.out.println("今天的日期:" + nowDate);//今天的日期:2018-09-06 int year = nowDate.getYear();//年:一般用这个方法获取年 System.out.println("year:" + year);//year:2018 int month = nowDate.getMonthValue();//月:一般用这个方法获取月 System.out.println("month:" + month);//month:9 int day = nowDate.getDayOfMonth();//日:当月的第几天,一般用这个方法获取日 System.out.println("day:" + day);//day:6 int dayOfYear = nowDate.getDayOfYear();//日:当年的第几天 System.out.println("dayOfYear:" + dayOfYear);//dayOfYear:249 //星期 System.out.println(nowDate.getDayOfWeek());//THURSDAY System.out.println(nowDate.getDayOfWeek().getValue());//4 //月份 System.out.println(nowDate.getMonth());//SEPTEMBER System.out.println(nowDate.getMonth().getValue());//9
(3)LocalTime
LocalTime类获取时间信息。格式为 15:33:56.749LocalTime nowTime = LocalTime.now(); System.out.println("今天的时间:" + nowTime);//今天的时间:15:33:56.749 int hour = nowTime.getHour();//时 System.out.println("hour:" + hour);//hour:15 int minute = nowTime.getMinute();//分 System.out.println("minute:" + minute);//minute:33 int second = nowTime.getSecond();//秒 System.out.println("second:" + second);//second:56 int nano = nowTime.getNano();//纳秒 System.out.println("nano:" + nano);//nano:749000000
(4)LocalDateTime
LocalDateTime类获取日期时间信息。格式为 2018-09-06T15:33:56.750LocalDateTime nowDateTime = LocalDateTime.now(); System.out.println("今天是:" + nowDateTime);//今天是:2018-09-06T15:33:56.750 System.out.println(nowDateTime.getYear());//年 System.out.println(nowDateTime.getMonthValue());//月 System.out.println(nowDateTime.getDayOfMonth());//日 System.out.println(nowDateTime.getHour());//时 System.out.println(nowDateTime.getMinute());//分 System.out.println(nowDateTime.getSecond());//秒 System.out.println(nowDateTime.getNano());//纳秒 //日:当年的第几天 System.out.println("dayOfYear:"nowDateTime.getDayOfYear());//dayOfYear:249 //星期 System.out.println(nowDateTime.getDayOfWeek());//THURSDAY System.out.println(nowDateTime.getDayOfWeek().getValue());//4 //月份 System.out.println(nowDateTime.getMonth());//SEPTEMBER System.out.println(nowDateTime.getMonth().getValue());//9
二、获取指定时间
(1)LocalDateSystem.out.println(LocalDate.of(1991, 11, 11));//直接传入对应的年月日 System.out.println(LocalDate.of(1991, Month.NOVEMBER, 11));//相对上面只是把月换成了枚举 LocalDate birDay = LocalDate.of(1991, 11, 11); System.out.println(LocalDate.ofYearDay(1991, birDay.getDayOfYear()));//第一个参数为年,第二个参数为当年的第多少天 System.out.println(LocalDate.ofEpochDay(birDay.toEpochDay()));//参数为距离1970-01-01的天数 System.out.println(LocalDate.parse("1991-11-11")); System.out.println(LocalDate.parse("19911111",DateTimeFormatter.ofPattern("yyyyMMdd")));
(2)LocalTime
System.out.println(LocalTime.of(8, 20));//时分 System.out.println(LocalTime.of(8, 20, 30));//时分秒 System.out.println(LocalTime.of(8, 20, 30, 150));//时分秒纳秒 LocalTime mTime = LocalTime.of(8, 20, 30, 150); System.out.println(LocalTime.ofSecondOfDay(mTime.toSecondOfDay()));//参数为距离当天零时的秒数 System.out.println(LocalTime.ofNanoOfDay(mTime.toNanoOfDay()));//参数为距离当天零时的纳秒数 System.out.println(LocalTime.parse("08:20:30")); System.out.println(LocalTime.parse("082030", DateTimeFormatter.ofPattern("HHmmss")));
(3)LocalDateTime
这里的 birDay 和 mTime 复用上面的变量。System.out.println(LocalDateTime.of(birDay, mTime));//参数为LocalDate和LocalTime System.out.println(LocalDateTime.of(1991, 11, 11, 8, 20)); System.out.println(LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20)); System.out.println(LocalDateTime.of(1991, 11, 11, 8, 20, 30)); System.out.println(LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30)); System.out.println(LocalDateTime.of(1991, 11, 11, 8, 20, 30, 150)); System.out.println(LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30, 150)); System.out.println(LocalDateTime.parse("1991-11-11T08:20:30")); System.out.println(LocalDateTime.parse("1991-11-11 08:20:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-
Java 8 新的时间日期库java.time
2020-07-12 23:46:56LocalDate——不包含具体时间的日期,比如 2020-01-14。它可以用来存储生日,周年纪念日,入职日期等。 LocalTime——它代表的是不含日期的时间 LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说...- Instant——它代表的是时间戳
- LocalDate——不包含具体时间的日期,比如 2020-01-14。它可以用来存储生日,周年纪念日,入职日期等。
- LocalTime——它代表的是不含日期的时间
- LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。
- ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以 UTC / 格林威治时间为基准的。
Java 8 是如何处理时间及日期的
示例 1 如何 在 Java 8 中获取当天的日期
LocalDate today = LocalDate.now(); System.out.println("Today's Local date : " + today); Output Today's Local date : 2020-01-14
示例 2 如何在 Java 8 中获取当前的年月日
LocalDate today = LocalDate.now(); int year = today.getYear(); int month = today.getMonthValue(); int day = today.getDayOfMonth(); System.out.printf("Year : %d Month : %d day : %d \t %n", year, month, day); Output Today's Local date : 2020-01-14 Year : 2020 Month : 1 day : 14
示例 3 在 Java 8 中如何获取某个特定的日期
LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); System.out.println("Your Date of birth is : " + dateOfBirth); Output : Your Date of birth is : 2010-01-14
示例 4 在 Java 8 中如何检查两个日期是否相等
LocalDate date1 = LocalDate.of(2020, 01, 14); if(date1.equals(today)){ System.out.printf("Today %s and date1 %s are same date %n", today, date1); } Output today 2020-01-14 and date1 2020-01-14 are same date
示例 5 在 Java 8 中如何检查重复事件,比如说生日
LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth()); MonthDay currentMonthDay = MonthDay.from(today); if(currentMonthDay.equals(birthday)){ System.out.println("Many Many happy returns of the day !!"); }else{ System.out.println("Sorry, today is not your birthday"); } Output: Many Many happy returns of the day !!
示例 6 如何在 Java 8 中获取当前时间
LocalTime time = LocalTime.now(); System.out.println("local time now : " + time); Output local time now : 16:33:33.369 // in hour, minutes, seconds, nano seconds
示例 7 如何增加时间里面的小时数
LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(2); // adding two hours System.out.println("Time after 2 hours : " + newTime); Output : Time after 2 hours : 18:33:33.369
示例 8 如何获取 1 周后的日期
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); System.out.println("Today is : " + today); System.out.println("Date after 1 week : " + nextWeek); Output: Today is : 2020-01-14 Date after 1 week : 2020-01-21
示例 9 一年前后的日期
LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); System.out.println("Date before 1 year : " + previousYear); LocalDate nextYear = today.plus(1, YEARS); System.out.println("Date after 1 year : " + nextYear); Output: Date before 1 year : 2019-01-14 Date after 1 year : 2021-01-14
示例 10 在 Java 8 中使用时钟
// Returns the current time based on your system clock and set to UTC. Clock clock = Clock.systemUTC(); System.out.println("Clock : " + clock); // Returns time based on system clock zone Clock defaultClock = Clock.systemDefaultZone(); System.out.println("Clock : " + clock); Output: Clock : SystemClock[Z] Clock : SystemClock[Z]
public class MyClass { private Clock clock; // dependency inject ... public void process(LocalDate eventDate) { if(eventDate.isBefore(LocalDate.now(clock)) { ... } } }
示例 11 在 Java 中如何判断某个日期是在另一个日期的前面还是后面
LocalDate tomorrow = LocalDate.of(2020, 1, 15); if(tommorow.isAfter(today)){ System.out.println("Tomorrow comes after today"); } LocalDate yesterday = today.minus(1, DAYS); if(yesterday.isBefore(today)){ System.out.println("Yesterday is day before today"); } Output: Tomorrow comes after today Yesterday is day before today
示例 12 在 Java 8 中处理不同的时区
// Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York"); LocalDateTime localtDateAndTime = LocalDateTime.now(); ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america ); System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork); Output : Current date and time in a particular timezone : 2020-01-14T16:33:33.373-05:00[America/New_York]
Exception in thread "main" java.time.zone.ZoneRulesException: Unknown time-zone ID: ASIA/Tokyo at java.time.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:272) at java.time.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:227) at java.time.ZoneRegion.ofId(ZoneRegion.java:120) at java.time.ZoneId.of(ZoneId.java:403) at java.time.ZoneId.of(ZoneId.java:351)
示例 13 如何表示固定的日期,比如信用卡过期时间
YearMonth currentYearMonth = YearMonth.now(); System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth()); YearMonth creditCardExpiry = YearMonth.of(2018, Month.FEBRUARY); System.out.printf("Your credit card expires on %s %n", creditCardExpiry); Output: Days in month year 2020-01: 31 Your credit card expires on 2018-02
示例 14 如何在 Java 8 中检查闰年
if(today.isLeapYear()){ System.out.println("This year is Leap year"); }else { System.out.println("2020 is not a Leap year"); } Output: 2020 is not a Leap year
示例 15 两个日期之间包含多少天,多少个月
LocalDate java8Release = LocalDate.of(2020, Month.MARCH, 14); Period periodToNextJavaRelease = Period.between(today, java8Release); System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths() ); Output: Months left between today and Java 8 release : 2
示例 16 带时区偏移量的日期与时间
LocalDateTime datetime = LocalDateTime.of(2020, Month.JANUARY, 14, 19, 30); ZoneOffset offset = ZoneOffset.of("+05:30"); OffsetDateTime date = OffsetDateTime.of(datetime, offset); System.out.println("Date and Time with timezone offset in Java : " + date); Output : Date and Time with timezone offset in Java : 2020-01-14T19:30+05:30
示例 17 在 Java 8 中如何获取当前时间戳
Instant timestamp = Instant.now(); System.out.println("What is value of this instant " + timestamp); Output : What is value of this instant 2020-01-14T08:33:33.379Z
示例 18 如何在 Java 8 中使用预定义的格式器来对日期进行解析 / 格式化
String dayAfterTommorrow = "20200116"; LocalDate formatted = LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE); System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted); Output : Date generated from String 20200116 is 2020-01-16
示例 19 如何在 Java 中使用自定义的格式器来解析日期
String goodFriday = "Apr 18 2020"; try { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy"); LocalDate holiday = LocalDate.parse(goodFriday, formatter); System.out.printf("Successfully parsed String %s, date is %s%n", goodFriday, holiday); } catch (DateTimeParseException ex) { System.out.printf("%s is not parsable!%n", goodFriday); ex.printStackTrace(); } Output : Successfully parsed String Apr 18 2020, date is 2020-04-18
示例 20 如何在 Java 8 中对日期进行格式化,转换成字符串
LocalDateTime arrivalDate = LocalDateTime.now(); try { DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm a"); String landing = arrivalDate.format(format); System.out.printf("Arriving at : %s %n", landing); } catch (DateTimeException ex) { System.out.printf("%s can't be formatted!%n", arrivalDate); ex.printStackTrace(); } Output : Arriving at : Jan 14 2020 04:33 PM
示例 21获取时间戳秒和毫秒
Instant ins= Instant.now(); System.out.println("10位 秒"+ins.getEpochSecond()); System.out.println("13位 毫秒"+ins.toEpochMilli());
Java 8 中日期与时间 API 的几个关键点
- 它提供了 javax.time.ZoneId 用来处理时区。
- 它提供了 LocalDate 与 LocalTime 类
- Java 8 中新的时间与日期 API 中的所有类都是不可变且线程安全的,这与之前的 Date 与 Calendar API 中的恰好相反,那里面像 java.util.Date 以及 SimpleDateFormat 这些关键的类都不是线程安全的。
- 新的时间与日期 API 中很重要的一点是它定义清楚了基本的时间与日期的概念,比方说,瞬时时间,持续时间,日期,时间,时区以及时间段。它们都是基于 ISO 日历体系的。
- 每个 Java 开发人员都应该至少了解这套新的 API 中的这五个类:
- Instant 它代表的是时间戳,比如 2020-01-14T02:20:13.592Z,这可以从 java.time.Clock 类中获取,像这样: Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
- LocalDate 它表示的是不带时间的日期,比如 2020-01-14。它可以用来存储生日,周年纪念日,入职日期等。
- LocalTime – 它表示的是不带日期的时间
- LocalDateTime – 它包含了时间与日期,不过没有带时区的偏移量
- ZonedDateTime – 这是一个带时区的完整时间,它根据 UTC / 格林威治时间来进行时区调整
- 这个库的主包是 java.time,里面包含了代表日期,时间,瞬时以及持续时间的类。它有两个子 package,一个是 java.time.foramt,这个是什么用途就很明显了,还有一个是 java.time.temporal,它能从更低层面对各个字段进行访问。
- 时区指的是地球上共享同一标准时间的地区。每个时区都有一个唯一标识符,同时还有一个地区 / 城市 (Asia/Tokyo) 的格式以及从格林威治时间开始的一个偏移时间。比如说,东京的偏移时间就是 + 09:00。
- OffsetDateTime 类实际上包含了 LocalDateTime 与 ZoneOffset。它用来表示一个包含格林威治时间偏移量(+/- 小时:分,比如 + 06:00 或者 -08:00)的完整的日期(年月日)及时间(时分秒,纳秒)。
- DateTimeFormatter 类用于在 Java 中进行日期的格式化与解析。与 SimpleDateFormat 不同,它是不可变且线程安全的,如果需要的话,可以赋值给一个静态变量。DateTimeFormatter 类提供了许多预定义的格式器,你也可以自定义自己想要的格式。当然了,根据约定,它还有一个 parse() 方法是用于将字符串转换成日期的,如果转换期间出现任何错误,它会抛出 DateTimeParseException 异常。类似的,DateFormatter 类也有一个用于格式化日期的 format() 方法,它出错的话则会抛出 DateTimeException 异常。
- 再说一句,“MMM d yyyy”与 “MMm dd yyyy” 这两个日期格式也略有不同,前者能识别出”Jan 2 2020″与”Jan 14 2020″这两个串,而后者如果传进来的是”Jan 2 2020″则会报错,因为它期望月份处传进来的是两个字符。为了解决这个问题,在天为个位数的情况下,你得在前面补 0,比如”Jan 2 2020″应该改为”Jan 02 2020″。
-
jdk8新增日期时间新特性
2021-01-25 17:07:00不包含具体时间的日期 LocalTime 不含日期的时间 LocalDateTime 包含了日期及时间 1.获取日期时间 1.LocalDate 获取日期 LocalDate nowDate = LocalDate.now(); //今天的日期 int year = nowDate....简介
java中引用的包 import java.time.LocalDate
属性 功能 Instant 代表的是时间戳 LocalDate 不包含具体时间的日期 LocalTime 不含日期的时间 LocalDateTime 包含了日期及时间 1.获取日期时间
1.LocalDate 获取日期
LocalDate nowDate = LocalDate.now(); //今天的日期 int year = nowDate.getYear(); //年:一般用这个方法获取年 int month = nowDate.getMonthValue(); //月:一般用这个方法获取月 int day = nowDate.getDayOfMonth(); //日:当月的第几天,一般用这个方法获取日 int dayOfYear = nowDate.getDayOfYear(); //日:当年的第几天 //星期 System.out.println(nowDate.getDayOfWeek()); //默认是日期英文表示 System.out.println(nowDate.getDayOfWeek().getValue()); //日期阿拉伯数字表示 //月份 System.out.println(nowDate.getMonth()); //默认是日期英文表示 System.out.println(nowDate.getMonth().getValue()); //日期阿拉伯数字表示
2.LocalTime 获取时间
LocalTime nowTime = LocalTime.now(); //当前时间 int hour = nowTime.getHour(); //时 int minute = nowTime.getMinute(); //分 int second = nowTime.getSecond(); //秒 int nano = nowTime.getNano(); //纳秒
3.LocalDateTime 获取日期时间
LocalDateTime nowDateTime = LocalDateTime.now(); //当前日期时间:2021-01-25T16:11:34.741 System.out.println(nowDateTime.getYear());//年 System.out.println(nowDateTime.getMonthValue());//月 System.out.println(nowDateTime.getDayOfMonth());//日 System.out.println(nowDateTime.getHour());//时 System.out.println(nowDateTime.getMinute());//分 System.out.println(nowDateTime.getSecond());//秒 System.out.println(nowDateTime.getNano());//纳秒 System.out.println(nowDateTime.getDayOfYear());//日:当年的第几天 //星期 System.out.println(nowDateTime.getDayOfWeek()); System.out.println(nowDateTime.getDayOfWeek().getValue()); //月份 System.out.println(nowDateTime.getMonth()); System.out.println(nowDateTime.getMonth().getValue());
2.获取指定日期时间
1.LocalDate
LocalDate.of(1991, 11, 11);//直接传入对应的年月日 LocalDate.of(1991, Month.NOVEMBER, 11);//相对上面只是把月换成了枚举 LocalDate birDay = LocalDate.of(1991, 11, 11); LocalDate.ofYearDay(1991, birDay.getDayOfYear());//第一个参数为年,第二个参数为当年的第多少天 LocalDate.ofEpochDay(birDay.toEpochDay());//参数为距离1970-01-01的天数 LocalDate.parse("1991-11-11"); LocalDate.parse("19911111",DateTimeFormatter.ofPattern("yyyyMMdd"));
2.LocalTime
LocalTime.of(8, 20);//时分 LocalTime.of(8, 20, 30);//时分秒 LocalTime.of(8, 20, 30, 150);//时分秒纳秒 LocalTime mTime = LocalTime.of(8, 20, 30, 150); LocalTime.ofSecondOfDay(mTime.toSecondOfDay());//参数为距离当天零时的秒数 LocalTime.ofNanoOfDay(mTime.toNanoOfDay());//参数为距离当天零时的纳秒数 LocalTime.parse("08:20:30"); LocalTime.parse("082030", DateTimeFormatter.ofPattern("HHmmss"));
3.LocalDateTime
LocalDateTime.of(birDay, mTime);//参数为LocalDate和LocalTime LocalDateTime.of(1991, 11, 11, 8, 20); //1991-11-11T08:20 LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20); LocalDateTime.of(1991, 11, 11, 8, 20, 30); //1991-11-11T08:20:30 LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30); LocalDateTime.of(1991, 11, 11, 8, 20, 30, 150); //1991-11-11T08:20:30.000000150 LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30, 150); LocalDateTime.parse("1991-11-11T08:20:30"); LocalDateTime.parse("1991-11-11 08:20:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
3.日期时间的比较
LocalDate of = LocalDate.of(1994, Month.OCTOBER, 21); System.out.println(of.equals(LocalDate.now())); //false System.out.println(of + "指定日期是否在当前日期之前? " + of.isBefore(LocalDate.now())); //true System.out.println(of+ "指定日期是否在当前日期之后? " + of.isAfter(LocalDate.now())); //false
4.对日期时间的修改
LocalDate nowDate = LocalDate.now(); //当前日期 System.out.println(nowDate.minusYears(1));//一年前 System.out.println(nowDate.minusMonths(1));//一月前 System.out.println(nowDate.minusWeeks(1));//一周前 System.out.println(nowDate.minusDays(1));//一天前 System.out.println(nowDate.plusYears(1));//一年后 System.out.println(nowDate.plusMonths(1));//一月后 System.out.println(nowDate.plusWeeks(1));//一周后 System.out.println(nowDate.plusDays(1));//一天后 LocalTime nowTime = LocalTime.now(); //当前时间 System.out.println(nowTime.minusHours(1));//一小时前 System.out.println(nowTime.minusMinutes(1));//一分钟前 System.out.println(nowTime.minusSeconds(1));//一秒前 System.out.println(nowTime.minusNanos(1));//一纳秒前 System.out.println(nowTime.plusHours(1));//一小时后 System.out.println(nowTime.plusMinutes(1));//一分钟后 System.out.println(nowTime.plusSeconds(1));//一秒后 System.out.println(nowTime.plusNanos(1));//一纳秒后
还可以直接使用 minus 和 plus 方法来增加和减少日期时间。LocalDateTime 、LocalDate 、LocalTime 都是类似的
ChronoUnit 用来表示时间单位, ChronoUnit 后面只需要替换成相应的年、月、周、日、时、分、秒、纳秒,就能减少或增加相应的单位。例如:System.out.println(nowDate.minus(1, ChronoUnit.YEARS)); //减 System.out.println(nowDate.plus(1, ChronoUnit.YEARS)); //加
4.时间戳
Instant instant = Instant.now(); System.out.println("当前时间戳是:" + instant);//当前时间戳是:2018-09-06T10:14:29.460Z Date date = Date.from(instant); System.out.println("当前时间戳是:" + date);//当前时间戳是:Thu Sep 06 18:14:29 CST 2018 instant = date.toInstant();
5.日期时间格式化
在JDK8之前,时间日期的格式化非常麻烦,经常使用SimpleDateFormat来进行格式化,但是SimpleDateFormat并不是线程安全的。在JDK8中,引入了一个全新的线程安全的日期与时间格式器DateTimeFormatter
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //将当前日期时间格式化 ,DateTimeFormatter.ofPattern("自定义格式")
6.计算日期时间差
主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算。只能精确到年月日。
LocalDate today = LocalDate.now(); System.out.println(today);//2018-09-06 LocalDate birthDate = LocalDate.of(1992, 1, 11); System.out.println(birthDate);//1990-10-01 Period period = Period.between(birthDate, today);//第二个参数减第一个参数 System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());//年龄 : 27 年 11 月 5 日
java.time.Duration
提供了使用基于时间的值测量时间量的方法。
用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。LocalDateTime today = LocalDateTime.now(); System.out.println(today); LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30); System.out.println(birthDate); Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数 System.out.println(duration.toDays());//两个时间差的天数 System.out.println(duration.toHours());//两个时间差的小时数 System.out.println(duration.toMinutes());//两个时间差的分钟数 System.out.println(duration.toMillis());//两个时间差的毫秒数 System.out.println(duration.toNanos());//两个时间差的纳秒数
java.time.temporal.ChronoUnit
ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。LocalDateTime today = LocalDateTime.now(); System.out.println(today); LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30); System.out.println(birthDate); System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
-
Openresty资料之时间日期
2019-05-28 17:07:22下面三个函数能够获取不同格式的当前时间: ngx.today():本地时间,格式是yyyy-mm-dd,不含时分秒 ngx.localtime():本地时间,格式是yyyy-mm-dd hh:mm:ss ngx.utctime():UTC 时间,格式是yyyy-mm-dd hh:mm:ss ◆...◆ 当前时间:
下面三个函数能够获取不同格式的当前时间:
ngx.today():本地时间,格式是yyyy-mm-dd,不含时分秒 ngx.localtime():本地时间,格式是yyyy-mm-dd hh:mm:ss ngx.utctime():UTC 时间,格式是yyyy-mm-dd hh:mm:ss
◆ 时间戳:
获取当前的时间戳可以使用两个函数:
ngx.time():当前的时间戳,即epoch以来的秒数 ngx.now():类似ngx.time,但返回的是浮点数,精确到毫秒
在实践中我们通常使用ngx.now获取更精确的时间用来计时,但要注意它只能精确到毫秒级别,想要获取更高的精确度需要通过ffi库调用系统函数gettimeofday()。
◆ 格式化时间戳:
时间戳和字符串格式的时间可以互相转换, OpenResty 提供三个函数:
ngx.http_time():把时间戳转换为http时间格式 ngx.cookie_time():把时间戳转换为cookie时间格式 ngx.parse_http_time():解析http 时间格式,转换为时间戳
示例:
local secs = 1514880339 -- 一个时间戳 ngx.say(ngx.http_time (secs)) ngx.say(ngx.cookie_time(secs)) local str = ” Tue, 02 Jan 2018 08 : 05 : 39 GMT ” -- 一个http 格式的时间 ngx.say(ngx.parse_http_time(str)) -- 转换为时间戳
◆ 更新时间:
ngx.localtime/ngx.time/ngx.now等函数获取的时间基于OpenResty内部缓存的时
间,与实际时间相比可能存在微小的误差,如果想要随时获得准确的时间可以先调用函数ngx.update_time,然后再调用时间函数。ngx.update_time会使用系统函数gettimeofday()强制更新时间,成本较高,除非
必要应当尽量少用。ngx.update_time() -- 强制更新内部缓存的时间 ngx.now() -- 之后就可以获得更准确的时间
◆ ngx.sleep:
ngx.sleep是Openresty提供的同步非阻塞的睡眠函数,可以“睡眠”任意的时间长度
但不会阻塞整个服务,这时OpenResty会基于协程机制转而处理其他的请求,等睡眠时间到再“回头”继续执行ngx.sleep后续的代码。ngx.sleep的时间单位是秒,可以用小数指定更小的时间(最小是0.001秒,即1毫
秒)ngx.sleep(1.0) ngx.sleep(0.001)
注:ngx.sleep不能在init_by_lua/init_worker_by_lua/set_by_lua/header|body_ filter_by_lua/log_by_lua等执行阶段里调用。
-
ecxcle 对于日期的处理
2017-09-14 10:48:57Excel数据处理: Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化 ...2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式 1).判断是否是 -
java节假日算法_用java 进行日期计算,获取当前天+1天,周末节假日不算,在线等待中,十万火急……...
2020-12-29 10:49:57周末版本(不含节假日判断)注意:最下面是使用的 递归32313133353236313431303231363533e58685e5aeb931333335326262算法/***获得收益时间(获取当前天+1天,周末不算).**@paramdate*任意日期*@returntheincomedate*@... -
记一次使用poi导入处理Excel中日期格式
2017-08-16 13:03:57Excel存储日期、时间均以数值类型进行存储,读取时先使用POI判断是否是数值类型,再进行...2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式 1).判断是否是日期格式:HSSFDateUtil.isCellDate -
JDK8 时间API
2020-05-05 22:15:49背景 JDK8中增加了一套全新的日期时间API,这里进行...LocalDate:不包含具体时间的日期。 LocalTime:不含日期的时间。 LocalDateTime:包含了日期及时间。 回到顶部 获取日期时间的信息 LocalDate Local... -
Java8时间函数
2020-03-07 13:57:04Java8时间函数 public class TimeFun { public static void main(String[] args) { // 获取今天的日期 不含时分秒 LocalDate today = LocalDate.now(); System.out.println("今天的日期:" + today); ... -
c#常用的类和方法
2017-06-01 08:30:011. 数据类型转换函数 Convert.ToXXX(); XXX.Parse();...2. 日期相关的类与函数 ...获取系统当前日期(含时间):DateTime.Now ...获取系统当前日期(不含时间):DateTime.Today 获取DateTime对象的年、 -
C#常用类和方法的总结
2013-09-14 18:11:001. 数据类型转换函数 Convert.ToXXX(); XXX.Parse();...获取系统当前日期(不含时间):DateTime.Today 获取DateTime对象的年、月、日、时、分、秒、毫秒 日期比较函数:Compare() 在指定的日期上... -
poi读取excel解析最常见的问题
2014-09-10 15:53:321、时间格式问题 Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化 ...2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式 1).判断是否是 -
江的福与MySQL(单行函数收尾)
2020-04-22 16:42:56返回当前系统时间,不含时间 SELECT CURDATE() 返回当前时间,不包含日期 SELECT CURTIME() 获取指定的部分,年,月,,,,,, SELECT YEAR(NOW()) 年 SELECT YEAR(hiredate) 年 FROM employees SELECT MONTH.... -
C#常用类和方法<转>
2017-10-20 14:57:001.数据类型转换函数 Convert.ToXXX();...获取系统当前日期(不含时间):DateTime.Today 获取DateTime对象的年、月、日、时、分、秒、毫秒 日期比较函数:Compare() 在指定的日期上添加相应的天数、月份... -
c#常用方法和类
2017-02-16 16:15:001.数据类型转换函数 Convert.ToXXX();...获取系统当前日期(不含时间):DateTime.Today 获取DateTime对象的年、月、日、时、分、秒、毫秒 日期比较函数:Compare() 在指定的日期上添加相应... -
C#常用类和方法
2014-10-10 23:10:00C#常用类和方法 1. 数据类型转换函数 Convert.ToXXX(); ...获取系统当前日期(不含时间):DateTime.Today 获取DateTime对象的年、月、日、时、分、秒、毫秒 日期比较函数:Compare() 在... -
Java8日期类教程
2020-01-20 17:16:56获取今天日期示例2:获取年、月、日信息示例3:处理特定日期示例4:判断两个日期是否相等示例5:检查像生日这种周期性事件示例6:获取当前时间(不含日期)示例7:计算3小时以后的时间示例8:计算一周后的日期示例9:计算... -
Oracle使用总结
2016-01-29 14:57:00drop table *** purge;/删除表释放空间:如果后面不加purge...获取当前日期(不含时间)select to_char(sysdate,'yyyy-mm-dd') AS F_FullDate FROM DUAL 查看表的主键: select cu.* from user_cons_columns cu, ... -
HTTP常用方法及状态码
2020-09-05 12:45:46HEAD和GET本质是一样的,区别在于HEAD不含呈现数据,而仅仅是HTTP头部信息,一般常用于确认URL的有效性及资源更新的日期时间 1.3 POST:传输实体主题 POST向服务器提交数据 补充:GET和POST的区别: GET提交的数据... -
C#开发实战1200例(第2卷.完整版)(清华出版.王小科.王军).part2
2016-06-17 07:56:52实例039 获取系统启动后经过的时间 实例040 获取任务栏尺寸 实例041 改变系统提示信息 实例042 获取系统环境变量 3.2 获取计算机硬件信息 实例043 获取计算机内存信息 实例044 获取cpu相关信息 实例045 获取主板相关... -
明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】
2019-03-22 14:34:56写入日期和时间 372 获取上一次运行时的信息 376 显示文件内容 378 文件的复制 380 13-2 文本和二进制 382 在文本文件中保存实数 382 文本文件和二进制文件 383 在二进制文件中保存实数 384 显示文件自身 ... -
jQuery权威指南-源代码
2013-11-11 14:36:34出版时间:2011年1月 编辑推荐: 内容全面,系统地讲解了jQuery方方面面 实战性强,囊括118个实例和2个综合案例 资深专家亲自执笔,4大专业社区一致鼎力推荐 内容简介: jQuery是继Prototype之后的又一个优秀... -
EXCEL集成工具箱V6.0
2010-09-11 01:44:37【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较<快捷取数列>... -
EXCEL集成工具箱完整版 (简体/繁体/英文多国语言版) V7.0
2010-08-13 10:31:10【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较<快捷取数列>... -
EXCEL集成工具箱V9.0 多国语言最终原版(2003-2010通用)
2011-01-07 20:40:25【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较<快捷取数列>... -
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)
2010-09-11 12:08:58【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较<快捷取数列>... -
EXCEL集成工具箱V8.0完整增强版(精简)
2010-09-23 16:58:17【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较<快捷取数列>... -
电子商务商城网站代码
2010-01-06 09:50:53展现网站中的全部商铺可以按时间或人气排序 选择一个商铺后将进入店铺页面(铺子功能主要有) 商铺首页(显示该店铺的详细信息,及本店铺的信誉度和推荐物品.可根据商品名称收索该铺子此商品) 商品列表(显示本店铺所... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part3
2016-06-21 20:50:39注:原版不含书签,为阅读方便,本人耗巨时编辑了详细完整的书签。 全书压缩打包成3部分,这是第3部分。 内容简介 本书深入浅出地讲述Visual C++各种编程诀窍,以高屋建瓴的眼光看待MFC编程的技巧和思想,详尽...
-
P4921 [MtOI2018]情侣?给我烧了!
-
CCW软件基本使用介绍.docx
-
美迪凯首次公开发行股票并在科创板上市招股说明书.pdf
-
MySQL 高可用工具 DRBD 实战部署详解
-
线程状态
-
Day2-运算符和变量作业
-
华为1+X——网络系统建设与运维(高级)
-
Oracle_11g_Linux到Linux_DataGuard部署
-
MySQL 数据库的基本操作(数据完整性约束)
-
项目1.exe。。。。。
-
2014年重庆理工大学《局域网技术与组网工程》期末考试试卷.pdf
-
VC实现teechart时间轴自右向左推移-C++代码类资源
-
09_Redis的事物
-
2014年重庆理工大学《物联网技术导论》期末考试试卷.pdf
-
Java复习------OOP
-
MySQL 数据类型和运算符
-
2014年重庆理工大学《数据库原理及应用》两套期末考试试卷.pdf
-
Dockerflie:tf-nightly-gpu-docker-cuda11.1
-
【链表】:输入一个链表,输出该链表中倒数第k个结点。
-
MySQL DML 语言(插入、更新与删除数据)