如何在Java中获取+0000的UTC格式?

elv*_*vis -3 java datetime date utc

我想将日期格式从 更改"20230523154325"2023-05-23T15:43:25+0000".
我有这段代码,但不幸的是结果是这样的:"2023-05-23T15:43:25+0300"
所以我不想拥有,我想最后+0300拥有。+0000所以,这部分应该是完全相同的2023-05-23T15:43:25,而不是+0300应该是+0000+0000把这个放在最后很重要。任何反馈将不胜感激!

public static void main(String[] args) {
    String oldDate = "20230523154325";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    Date newDateFormat = null;

    try {
        newDateFormat = sdf.parse(oldDate);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
    
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    System.out.println("The date is " + sdf1.format(newDateFormat));
}
Run Code Online (Sandbox Code Playgroud)

deH*_*aar 5

\n

我想将日期格式从 20230523154325 更改为 2023-05-23T15:43:25+0000

\n
\n

你可以这样做java.time如果您使用的是 Java 8 或更高版本,

\n

示例代码

\n
public static void main(String[] args) {\n    // example input\n    String oldDate = "20230523154325";\n    // prepare a parser\n    DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuuMMddHHmmss");\n    // parse the oldDate with the parser\n    LocalDateTime ldt = LocalDateTime.parse(oldDate, parser);\n    // print the result (NO OFFSET SO FAR!!!)\n    System.out.println(ldt);\n    // add an offset (UTC = +00:00 = Z)\n    OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC);\n    // print it\n    System.out.println(odt);\n    // prepare a formatter for the desired output\n    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd\'T\'HH:mm:ssxxxx");\n    // then print the datetime plus offset in the desired format\n    System.out.println(odt.format(formatter));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
public static void main(String[] args) {\n    // example input\n    String oldDate = "20230523154325";\n    // prepare a parser\n    DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuuMMddHHmmss");\n    // parse the oldDate with the parser\n    LocalDateTime ldt = LocalDateTime.parse(oldDate, parser);\n    // print the result (NO OFFSET SO FAR!!!)\n    System.out.println(ldt);\n    // add an offset (UTC = +00:00 = Z)\n    OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC);\n    // print it\n    System.out.println(odt);\n    // prepare a formatter for the desired output\n    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd\'T\'HH:mm:ssxxxx");\n    // then print the datetime plus offset in the desired format\n    System.out.println(odt.format(formatter));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

有针对标准/常见格式的预构建格式DateTimeFormatter.ISO_OFFSET_DATE_TIME,例如 ,值得一看。但是,您必须手动DateTimeFormatter创建这两个,因为没有一个预构建的可以解析您的输入格式,并且它们都不能产生您想要的输出。

\n
\n

为什么你的尝试未能产生预期的结果?

\n

您的尝试涉及您的机器/jvm 的区域/偏移量,当代码在具有不同区域/偏移量的另一台机器上执行时,它甚至会更改偏移量。

\n

这就是为什么你

\n
    \n
  • 应该停止使用java.util.Date并且java.text.SimpleDateFormat无论何时何地,只要有可能\xe2\x80\xa6
  • \n
  • 应该切换到java.time因为您可以完全控制区域/偏移处理
  • \n
\n
\n

紧凑/短版

\n
public static void main(String[] args) {\n    String oldDate = "20230523154325";\n    DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuuMMddHHmmss");\n    DateTimeFormatter formatter = DateTimeFormatter\n                                    .ofPattern("uuuu-MM-dd\'T\'HH:mm:ssxxxx");\n    String desiredResult = LocalDateTime.parse(oldDate, parser)\n                                        .atOffset(ZoneOffset.UTC)\n                                        .format(formatter);\n    System.out.println(desiredResult);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
2023-05-23T15:43:25\n2023-05-23T15:43:25Z\n2023-05-23T15:43:25+0000\n
Run Code Online (Sandbox Code Playgroud)\n