如何在Java中获取UTC格式+0000?[关闭]

pdtvr36n  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(230)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

2天前关闭。
Improve this question
我想将日期格式从"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));
}
hwamh0ep

hwamh0ep1#

我想将日期格式从20230523154325更改为2023-05- 23 T15:43:25+0000
如果您使用的是Java 8或更高版本,则可以使用java.time来实现。

示例代码

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

输出

2023-05-23T15:43:25
2023-05-23T15:43:25Z
2023-05-23T15:43:25+0000

有一些预构建的标准/通用格式,如DateTimeFormatter.ISO_OFFSET_DATE_TIME,值得一看。但是,在这种情况下,您必须手动创建这两个DateTimeFormatter,因为没有一个预构建的DateTimeFormatter可以解析您的输入格式,也没有一个可以生成您想要的输出。

为什么您的尝试没有产生预期的结果?

你的尝试涉及到你的机器/jvm的区域/偏移量,当代码在另一台具有不同区域/偏移量的机器上执行时,它甚至会改变偏移量。
这就是为什么你

  • 应该停止使用java.util.Datejava.text.SimpleDateFormat无论何时/何地你可以...
  • 应该切换到java.time,因为您可以完全控制区域/偏移量处理

精简版

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

输出

2023-05-23T15:43:25+0000
fafcakar

fafcakar2#

不要使用SimpleDateFormat。SimpleDateFormat示例有一个时区,这会导致像您所观察到的那样的误导性解析结果。
考虑到你的特定用例的简单性,我会完全忘记日期时间解析,而只是使用StringBuilder来插入字符:

String oldDate = "20230523154325";
StringBuilder formattedDate = new StringBuilder(oldDate);
formattedDate.append("+0000");
formattedDate.insert(12, ':');
formattedDate.insert(10, ':');
formattedDate.insert(8, 'T');
formattedDate.insert(6, '-');
formattedDate.insert(4, '-');
System.out.println("The date is " + formattedDate);

相关问题