如何构造一个 Date()
构造方法 【时间戳 显示为 当前时区时间】
代码语言:java
复制ZonedDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
// 于2024-07-30T15:07:31.9488855 08:00[Asia/Shanghai]执行如下代码
new Date(1562501898000L)); // Sun Jul 07 20:18:18 CST 2019 【当前时区】
new Date()); // Tue Jul 30 15:07:31 CST 2024 【当前时区】
根据Calendar 【时间戳 显示为 当前时区时间】
代码语言:javascript
复制// Sun Apr 21 17:26:41 CST 2024 执行如下代码
Calendar.getInstance().getTime()); // Sun Apr 21 17:26:41 CST 2024 【当前时区】
根据Timestamp 【时间戳 显示为 当前时区时间】
代码语言:java
复制Date date1 = new Timestamp(1562501898000L); // 2019-07-07 20:18:18.0 【当前时区】
new Date(new Timestamp(1562501898000L).getTime())); // Sun Jul 07 20:18:18 CST 2019 【当前时区】
根据Instant【时间戳 显示为 当前时区时间】
代码语言:java
复制Date.from(Instant.ofEpochMilli(1562501898888L))); //Sun Jul 07 20:18:18 CST 2019 【当前时区】
Date.from(Instant.ofEpochSecond(1562501898))); //Sun Jul 07 20:18:18 CST 2019 【当前时区】
Date.from(Instant.ofEpochSecond(1562501898, 888))); //Sun Jul 07 20:18:18 CST 2019 【当前时区】
Date.from(Instant.parse("2019-07-07T20:18:18.000000888Z"))); //Mon Jul 08 04:18:18 CST 2019 【当前时区】
Date.from(Instant.parse("2019-07-07T20:18:18Z"))); //Mon Jul 08 04:18:18 CST 2019 【当前时区】
// 这里把"2019-07-07T20:18:18.000000888Z"视为0时区时间了,故在东8区里多了8小时
ZonedDateTime ZONED_DATE_TIME = ZonedDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneId.of("Asia/Tokyo"));
Date.from(ZONED_DATE_TIME.toInstant())); //Sun Jul 07 19:18:18 CST 2019 【当前时区】
// 东9区时间到东8区时间转换会减去一个小时
OffsetDateTime OFFSET_DATE_TIME = OffsetDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneOffset.ofHours(9));
Date.from(OFFSET_DATE_TIME.toInstant())); //Sun Jul 07 19:18:18 CST 2019 【当前时区】
// 东9区时间到东8区时间转换会减去一个小时
LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);
Date.from(LOCAL_DATE_TIME.toInstant(ZoneOffset.UTC))); //Mon Jul 08 04:18:18 CST 2019 【当前时区】
// 把LocalDateTime视为0时区的时间转为Instant,故转到东8时区会加8小时
Date.from(LOCAL_DATE_TIME.toInstant(ZoneOffset.ofHours(8)))); //Sun Jul 07 20:18:18 CST 2019 【当前时区】
// 把LocalDateTime视为东8区的时间转为Instant,故转到东8时区时间不会变
String转Date
SimpleDateFormat不推荐
代码语言:java
复制DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("格式化器用的时区是:" dateFormat.getTimeZone().getID() ":" dateFormat.parse("2019-07-07 20:18:18"));
// 格式化器用的时区是:Asia/Shanghai:Sun Jul 07 20:18:18 CST 2019 // 相同时区故直接转换为Date
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
System.out.println("格式化器用的时区是:" dateFormat.getTimeZone().getID() ":" dateFormat.parse("2019-07-07 20:18:18"));
// 格式化器用的时区是:Asia/Tokyo:Sun Jul 07 19:18:18 CST 2019 // 把传入的时间当成日本时间、所以Date会少一个小时、因为中国比日本慢一个小时
8.2、DateUtils的共通方法
代码语言:java
复制import org.apache.commons.lang3.time.DateUtils;
DateUtils.parseDate("2019-07-32 20:18:18 0800", "yyyy-MM-dd HH:mm:ss Z")); //Thu Aug 01 20:18:18 CST 2019 【视String为当前时区时间去类型转换】
// 不合理日期会自动换算
DateUtils.parseDateStrictly("2019-07-07 20:18:18 0800", "yyyy-MM-dd HH:mm:ss Z")); //Sun Jul 07 20:18:18 CST 2019 【视String为当前时区时间去类型转换】
// 不合理日期直接报错
代码语言:java
复制DateUtils.parseDate("2019-7-07 20:18:18.888 0800","yyyy-MM-dd HH:mm:ss.SSS Z"));
DateUtils.parseDate("2019-7-07 20:18:18 0800","yyyy-MM-dd HH:mm:ss Z"));
DateUtils.parseDate("2019-7-07 20:18:18.888","yyyy-MM-dd HH:mm:ss.SSS"));
DateUtils.parseDate("2019-7-07 20:18:18","yyyy-MM-dd HH:mm:ss"));
DateUtils.parseDate("2019-7-07 20:18","yyyy-MM-dd HH:mm"));
DateUtils.parseDate("2019-7-07 20","yyyy-MM-dd HH"));
DateUtils.parseDate("2019-7-07","yyyy-MM-dd"));
DateUtils.parseDate("2019-7","yyyy-MM"));
DateUtils.parseDate("2019","yyyy"));
DateUtils.parseDate("2019/7/07 20:18:18.888 0800","yyyy/MM/dd HH:mm:ss.SSS Z"));
DateUtils.parseDate("2019/7/07 20:18:18 0800","yyyy/MM/dd HH:mm:ss Z"));
DateUtils.parseDate("2019/7/07 20:18:18.888","yyyy/MM/dd HH:mm:ss.SSS"));
DateUtils.parseDate("2019/7/07 20:18:18","yyyy/MM/dd HH:mm:ss"));
DateUtils.parseDate("2019/7/07 20:18","yyyy/MM/dd HH:mm"));
DateUtils.parseDate("2019/7/07 20","yyyy/MM/dd HH"));
DateUtils.parseDate("2019/7/07","yyyy/MM/dd"));
DateUtils.parseDate("2019/7","yyyy/MM"));
DateUtils.parseDate("2019","yyyy"));
DateUtils.parseDate("20190707 20:18:18.888 0800","yyyyMMdd HH:mm:ss.SSS Z"));
DateUtils.parseDate("20190707 20:18:18 0800","yyyyMMdd HH:mm:ss Z"));
DateUtils.parseDate("20190707 20:18:18.888","yyyyMMdd HH:mm:ss.SSS"));
DateUtils.parseDate("20190707 20:18:18","yyyyMMdd HH:mm:ss"));
DateUtils.parseDate("20190707 20:18","yyyyMMdd HH:mm"));
DateUtils.parseDate("20190707 20","yyyyMMdd HH"));
DateUtils.parseDate("20190707","yyyyMMdd"));
DateUtils.parseDate("201907","yyyyMM"));
DateUtils.parseDate("2019","yyyy"));
Sun Jul 07 20:18:18 CST 2019
Sun Jul 07 20:18:18 CST 2019
Sun Jul 07 20:18:18 CST 2019
Sun Jul 07 20:18:18 CST 2019
Sun Jul 07 20:18:00 CST 2019
Sun Jul 07 20:00:00 CST 2019
Sun Jul 07 00:00:00 CST 2019
Mon Jul 01 00:00:00 CST 2019
Tue Jan 01 00:00:00 CST 2019