如何将 yyyy DDD HH:mm:ss 转换为 ZonedDateTime>
How do I convert yyyy DDD HH:mm:ss into a ZonedDateTime>
我已经研究了一段时间的代码,但我似乎无法理解这一点。我为一年中的每个字段、一年中的一天、小时、分钟和秒都有 5 个微调器。我的目标是采用这 5 个参数并使用它们创建一个可以发送的 ZonedDateTime,但是由于使用年中日期格式(我无法更改)的困难,我不知道该去哪里.
只需像这样使用 ZonedDateTime parse
方法:
ZonedDateTime dt = ZonedDateTime.parse(
"2017 101 12:01:01",
DateTimeFormatter.ofPattern("yyyy DDD HH:mm:ss").withZone(
ZoneId.systemDefault()
)
);
请注意,这将 return 成为 "system default" 时区的 "date time"(因为它不是您输入模式的一部分)。
此外,"day of the year" 的输入值必须用零填充,例如
31 => 031
你可以这样做(例如),像这样:
String.format("%04d %03d %02d:%02d:%02d",year,doy,hour,minute,second)
(其中 year、doy、... 是来自您的微调器的整数值)
根据您从微调器获得的值生成一个 LocalDateTime 并获得一个 ZonedDateTime 对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy hh:mm:ss.SSS a");
LocalDateTime ldt = LocalDateTime.of(2017, Month.JULY, 17, 19, 30, 15, 333);
ZonedDateTime zonedDateT = ZonedDateTime.of(ldt, ZoneId.of("Europe/Paris"));
System.out.println(zonedDateT.format(formatter));
知道了就不难了:
ZonedDateTime dt = LocalDate.ofYearDay(2017, 86)
.atTime(16, 28, 55)
.atZone(ZoneId.systemDefault());
在我的电脑上这给出 2017-03-27T16:28:55+02:00[Europe/Oslo]
。
请将你的五个数字替换到我给出 int 文字的地方。您可能还想替换为其他时区。
给出
int yr = ...;
int dayOfYear = ... ;
int hour = ... ;
int minute = ... ;
int second = ... ;
(你可以从你的微调器那里得到)
你可以做到
LocalDate date = Year.of(yr).atDay(dayOfYear);
LocalTime time = LocalTime.of(hour, minute, second);
ZonedDateTime zdt = ZonedDateTime.of(date, time, ZoneId.systemDefault());
我已经研究了一段时间的代码,但我似乎无法理解这一点。我为一年中的每个字段、一年中的一天、小时、分钟和秒都有 5 个微调器。我的目标是采用这 5 个参数并使用它们创建一个可以发送的 ZonedDateTime,但是由于使用年中日期格式(我无法更改)的困难,我不知道该去哪里.
只需像这样使用 ZonedDateTime parse
方法:
ZonedDateTime dt = ZonedDateTime.parse(
"2017 101 12:01:01",
DateTimeFormatter.ofPattern("yyyy DDD HH:mm:ss").withZone(
ZoneId.systemDefault()
)
);
请注意,这将 return 成为 "system default" 时区的 "date time"(因为它不是您输入模式的一部分)。
此外,"day of the year" 的输入值必须用零填充,例如
31 => 031
你可以这样做(例如),像这样:
String.format("%04d %03d %02d:%02d:%02d",year,doy,hour,minute,second)
(其中 year、doy、... 是来自您的微调器的整数值)
根据您从微调器获得的值生成一个 LocalDateTime 并获得一个 ZonedDateTime 对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy hh:mm:ss.SSS a");
LocalDateTime ldt = LocalDateTime.of(2017, Month.JULY, 17, 19, 30, 15, 333);
ZonedDateTime zonedDateT = ZonedDateTime.of(ldt, ZoneId.of("Europe/Paris"));
System.out.println(zonedDateT.format(formatter));
知道了就不难了:
ZonedDateTime dt = LocalDate.ofYearDay(2017, 86)
.atTime(16, 28, 55)
.atZone(ZoneId.systemDefault());
在我的电脑上这给出 2017-03-27T16:28:55+02:00[Europe/Oslo]
。
请将你的五个数字替换到我给出 int 文字的地方。您可能还想替换为其他时区。
给出
int yr = ...;
int dayOfYear = ... ;
int hour = ... ;
int minute = ... ;
int second = ... ;
(你可以从你的微调器那里得到)
你可以做到
LocalDate date = Year.of(yr).atDay(dayOfYear);
LocalTime time = LocalTime.of(hour, minute, second);
ZonedDateTime zdt = ZonedDateTime.of(date, time, ZoneId.systemDefault());