英文:
Java date time format pattern for ISO_OFFSET_DATE_TIME
问题
我需要 ISO_OFFSET_DATE_TIME
的日期时间格式模式:
2019-09-30T10:05:16+10:00
yyyy-MM-dd'T'HH:mm:ssZ
对于 2019-09-30T10:05:16+1000
是有效的,但我需要区域偏移中的冒号。
如果这不可行,我将需要一个正则表达式。
英文:
I'm after the date time format pattern for ISO_OFFSET_DATE_TIME
2019-09-30T10:05:16+10:00
yyyy-MM-dd'T'HH:mm:ssZ
is valid for 2019-09-30T10:05:16+1000
but I need the colon in the zone offset
If this is not possible, I'll need a regular expression.
答案1
得分: 3
你需要在这里使用 uuuu-MM-dd'T'HH:mm:ssXXX
。
String str = "2019-09-30T10:05:16+10:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
OffsetDateTime datetime = OffsetDateTime.parse(str, formatter);
System.out.println(datetime);
英文:
You need uuuu-MM-dd'T'HH:mm:ssXXX
here.
String str = "2019-09-30T10:05:16+10:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
OffsetDateTime datetime = OffsetDateTime.parse(str, formatter);
System.out.println(datetime);
答案2
得分: 0
这要视情况而定。DateTimeFormatter.ISO_OFFSET_DATE_TIME
可以打印和解析带有秒数和不带秒数的字符串,以及带有小数秒和不带小数秒的字符串,后者最多可以有 9 位小数。
如果你只需要问题中所示格式变体的模式,即带秒数但不带小数秒,那么 MC Emperor 给出的答案正好适合你。
如果你需要完全灵活的 ISO_OFFSET_DATE_TIME
,那么就没有一个模式可以满足你的需求。那时你需要使用正则表达式的方式。但正则表达式很难像格式化器一样提供严格的验证。而且正则表达式可能会变得复杂,难以理解。
链接:我在类似问题中的回答,其中提供了更多细节。
英文:
It depends. DateTimeFormatter.ISO_OFFSET_DATE_TIME
prints and parses strings with and without seconds and with and without fraction of second, the latter up to 9 decimals.
If you only need the pattern for the variant of the format given in your question, with seconds and without fraction of second, the answer by MC Emperor is exactly what you need.
If you need the full flexibility of ISO_OFFSET_DATE_TIME
, then there is no pattern that can give you that. Then you will need to go the regular expression way. Which in turn can hardly give you as strict a validation as the formatter. And the regular expression may still grow complicated and very hard to read.
Link: My answer to a similar question with a few more details.
答案3
得分: 0
你可以使用 `yyyy-MM-dd'T'HH:mm:ssZZZZZ` 或者 `uuuu-MM-dd'T'HH:mm:ssXXX`。
**演示:**
```java
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDateTime = "2019-09-30T10:05:16+10:00";
OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
// 默认格式,即 OffsetDateTime#toString
System.out.println(odt);
// 自定义格式
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZZZZZ")));
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")));
}
}
输出:
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
<details>
<summary>英文:</summary>
You can use `yyyy-MM-dd'T'HH:mm:ssZZZZZ` or `uuuu-MM-dd'T'HH:mm:ssXXX`.
**Demo:**
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDateTime = "2019-09-30T10:05:16+10:00";
OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
// Default format i.e. OffsetDateTime#toString
System.out.println(odt);
// Custom format
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZZZZZ")));
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")));
}
}
**Output:**
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论