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
在OffsetDateTime java中解析不带偏移量的datetime_Java_Date_Datetime_Datetime Format - Fatal编程技术网

在OffsetDateTime java中解析不带偏移量的datetime

在OffsetDateTime java中解析不带偏移量的datetime,java,date,datetime,datetime-format,Java,Date,Datetime,Datetime Format,我是否可以使用OffsetDateTime.parse(..) Java代码: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX"); OffsetDateTime date = OffsetDateTime.parse("2017-02-03 12:30:3000", FORMATTER); 我将日期时间作为一个不带偏移量的字符串,但需要将其解析为OffsetDateT

我是否可以使用
OffsetDateTime.parse(..)

Java代码:

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX");
OffsetDateTime date = OffsetDateTime.parse("2017-02-03 12:30:3000", FORMATTER);

我将日期时间作为一个不带偏移量的
字符串
,但需要将其解析为
OffsetDateTime
,我知道这里需要偏移量,但我可以如何更改该
字符串
以插入默认/虚拟偏移量(可能+00:00)&使用
OffsetDateTime
解析它。问题是对象必须是
OffsetDateTime

最简单的解决方案是将字符串解析为
LocalDateTime
,然后转换:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    OffsetDateTime date = LocalDateTime.parse("2017-02-03 12:30:30", formatter)
            .atOffset(ZoneOffset.UTC);
这给出了
2017-02-03T12:30:30Z
OffsetDateTime
,其中
Z
表示UTC或偏移量为零

如果需要,可以直接解析为
OffsetDateTime

    DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
            .appendPattern("yyyy-MM-dd HH:mm:ss")
            .parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
            .toFormatter();
    OffsetDateTime date = OffsetDateTime.parse("2017-02-03 12:30:30", FORMATTER);
最后,如果您需要使用问题中给出的格式化程序,那么修改字符串以适应它当然是一个选项。例如:

    DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX");
    String fixedDateTimeString 
            = "2017-02-03 12:30:3000".replaceFirst("(\\d{2})0*$", "$1.000 +00:00");
    OffsetDateTime date = OffsetDateTime.parse(fixedDateTimeString, FORMATTER);
如您所见,在上一个示例中,我还保留了用作起点的字符串中过多的零,在附加偏移量的相同操作中删除它们。结果是一样的,
2017-02-03T12:30:30Z


编辑:
uuu
yyyy
格式模式字符串中的年份?因为这一年总是在普通的年代(安诺·多米尼),所以两者都是有效的
yyyy
表示纪年,如果有纪年指示符(如AD或BC,格式为模式字母
G
uuuu
是一个有符号的年份,其中0年表示公元前1年,-1表示公元前2年,以此类推。实际上,我通过以下方式实现了它:

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
OffsetDateTime.of(LocalDateTime.parse("2017-02-03 12:30:30", FORMATTER), ZoneOffset.UTC);

您可以这样做:
OffsetDateTime date=LocalDateTime.parse(“2017-02-03 12:30:3000”,格式化程序)@peter我通过下面的代码使它工作了一半,但它产生了2017-02-03T12:30:30+11:00而不是2017-02-03 12:30:30+11:00我想去掉介于
DateTimeFormatter FORMATTER=DateTimeFormatter.of模式(“yyyy-MM-dd HH:MM:ss.SSS”)之间的T;OffsetDateTime日期=OffsetDateTime.of(LocalDateTime.parse(“2017-02-03 12:30:30.000”,格式化程序),OffsetDateTime.now().getOffset())
之后,您应该使用模式(“yyyy-MM-dd HH:MM:ssXXX”)的DateTimeFormatter.of格式化解析的日期。格式(日期)
12:30:3000
??这是什么意思?