如何将yyyy DDD HH:mm:ss转换为ZonedDateTime>

时间:2017-03-27 14:06:01

标签: java date javafx time zoneddatetime

我一直在研究一些代码,我似乎无法弄清楚这一点。我每年的每个领域都有5个微调器,每年,每小时,每分钟和每秒。我的目标是获取这5个参数并使用它们来创建可以发送出去的ZonedDateTime,但我不知道该去哪里因为使用年份格式的困难(我无法改变)

4 个答案:

答案 0 :(得分:4)

当你知道如何时,并不难:

    ZonedDateTime dt = LocalDate.ofYearDay(2017, 86)
            .atTime(16, 28, 55)
            .atZone(ZoneId.systemDefault());

在我的计算机上,这会2017-03-27T16:28:55+02:00[Europe/Oslo]

请将您的五个数字替换为我给出文字的地方。您可能还想替换另一个时区。

答案 1 :(得分:3)

鉴于

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());

答案 2 :(得分:1)

只需使用ZonedDateTime parse方法:

ZonedDateTime dt = ZonedDateTime.parse(
     "2017 101 12:01:01",                                        
     DateTimeFormatter.ofPattern("yyyy DDD HH:mm:ss").withZone(
          ZoneId.systemDefault()
     )
);

请注意,这将在“系统默认”时区中返回“日期时间”(因为它不是输入模式的一部分)。

此外,“年中的日期”的输入值必须用零填充,例如

31 => 031

你可以这样做(例如):

String.format("%04d %03d %02d:%02d:%02d",year,doy,hour,minute,second)

(其中年份,doy,...是您的微调器的整数值)

答案 3 :(得分:0)

根据您从微调器获得的值生成 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));