Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将yyyy DDD HH:mm:ss转换为ZonedDateTime>;_Java_Date_Javafx_Time_Zoneddatetime - Fatal编程技术网

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

Java 如何将yyyy DDD HH:mm:ss转换为ZonedDateTime>;,java,date,javafx,time,zoneddatetime,Java,Date,Javafx,Time,Zoneddatetime,我已经写了一些代码有一段时间了,但我似乎不明白这一点。每年、每天、小时、分钟和秒,我都有5个旋转器。我的目标是获取这5个参数并使用它们创建一个可以发送的ZonedDateTime,但我不知道该怎么做,因为使用day of year格式(我无法更改)很困难。只需使用ZonedDateTime解析方法即可: ZonedDateTime dt = ZonedDateTime.parse( "2017 101 12:01:01",

我已经写了一些代码有一段时间了,但我似乎不明白这一点。每年、每天、小时、分钟和秒,我都有5个旋转器。我的目标是获取这5个参数并使用它们创建一个可以发送的ZonedDateTime,但我不知道该怎么做,因为使用day of year格式(我无法更改)很困难。

只需使用ZonedDateTime
解析
方法即可:

ZonedDateTime dt = ZonedDateTime.parse(
     "2017 101 12:01:01",                                        
     DateTimeFormatter.ofPattern("yyyy DDD HH:mm:ss").withZone(
          ZoneId.systemDefault()
     )
);
String.format("%04d %03d %02d:%02d:%02d",year,doy,hour,minute,second)
请注意,这将返回“系统默认”时区中的“日期时间”(因为它不是输入模式的一部分)

此外,“一年中的某一天”的输入值必须用零填充,例如

31 => 031
您可以这样做(例如):

ZonedDateTime dt = ZonedDateTime.parse(
     "2017 101 12:01:01",                                        
     DateTimeFormatter.ofPattern("yyyy DDD HH:mm:ss").withZone(
          ZoneId.systemDefault()
     )
);
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[欧洲/奥斯陆]

请把你的五个数字替换成我给出的整数。您可能还想替换另一个时区。

给定

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个valeus应该放在第2行,但是OP没有月和月的日期。是的,我没有月/月的日期,所以这个方法不符合描述,但无论如何,谢谢!但是,取5个单独的值,将它们连接成一个字符串,然后重新解析该字符串似乎有点过分。。。