将ZonedDateTime和Instant设置为不同的字符串格式

时间:2018-11-26 09:47:00

标签: java mysql datetime date-formatting

我仔细阅读了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 

但是我觉得这是一种不好的做法,应该在类中提供一种转换为正确格式的方法。是否可以从默认类中执行上述格式化操作?

1 个答案:

答案 0 :(得分:1)

按照下面的代码片段。

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 doc-> https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html