将 ZonedDateTime 和 Instant 格式化为不同的字符串格式
Format ZonedDateTime and Instant to different string format
我阅读了 ZonedDate 和 Instant 的文献,发现我可以通过以下方式将本地时间转换为 utc:
LocalDate d = LocalDate.now();
LocalTime time = LocalTime.of(00, 00, 00);
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
System.out.println(zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
Instant instant = zonedDateTime.toInstant();
System.out.println(instant);
问题是输出看起来像这样:
2018-11-26T00:00:00
2018-11-26T08:00:00Z
我正在尝试以 "yyyy-MM-dd HH:mm:ss" 的格式获取两个字符串,但很难让任何东西正常工作。因为我使用输出来查询 MYSQL 数据库,所以我可以手动执行:
String zoneDate = zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String utcDate = zonedDateTime.toInstant().toString();
zoneDate = zoneDate.replace('T', ' ').replace('Z', ' ');
utcDate = utcDate.replace('T', ' ').replace('Z', ' ');
我的新输出是:
2018-11-26 00:00:00
2018-11-26 08:00:00
但我觉得这是不好的做法,应该有一种方法可以在 类 中转换为正确的格式。有没有这样一种方法可以从默认的类?
执行上述格式
按照下面的代码片段。
LocalDate d = LocalDate.now();
LocalTime time = LocalTime.now();
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
String zoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(zonedDateTime);
ZonedDateTime utcZonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of(ZoneOffset.UTC.getId()));
String utcZoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(utcZonedDateTime);
System.out.println(zoneDate);
System.out.println(utcZoneDate);
这个的输出是
2018-11-26 02:20:08
2018-11-26 10:20:08
有关详细信息,请访问 java 文档 -> https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
我阅读了 ZonedDate 和 Instant 的文献,发现我可以通过以下方式将本地时间转换为 utc:
LocalDate d = LocalDate.now();
LocalTime time = LocalTime.of(00, 00, 00);
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
System.out.println(zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
Instant instant = zonedDateTime.toInstant();
System.out.println(instant);
问题是输出看起来像这样:
2018-11-26T00:00:00
2018-11-26T08:00:00Z
我正在尝试以 "yyyy-MM-dd HH:mm:ss" 的格式获取两个字符串,但很难让任何东西正常工作。因为我使用输出来查询 MYSQL 数据库,所以我可以手动执行:
String zoneDate = zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String utcDate = zonedDateTime.toInstant().toString();
zoneDate = zoneDate.replace('T', ' ').replace('Z', ' ');
utcDate = utcDate.replace('T', ' ').replace('Z', ' ');
我的新输出是:
2018-11-26 00:00:00
2018-11-26 08:00:00
但我觉得这是不好的做法,应该有一种方法可以在 类 中转换为正确的格式。有没有这样一种方法可以从默认的类?
执行上述格式按照下面的代码片段。
LocalDate d = LocalDate.now();
LocalTime time = LocalTime.now();
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
String zoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(zonedDateTime);
ZonedDateTime utcZonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of(ZoneOffset.UTC.getId()));
String utcZoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(utcZonedDateTime);
System.out.println(zoneDate);
System.out.println(utcZoneDate);
这个的输出是
2018-11-26 02:20:08
2018-11-26 10:20:08
有关详细信息,请访问 java 文档 -> https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html