java - 将字符串转换为 iso 日期格式

标签 java datetime string-formatting jodatime iso

所以我尝试将日期字符串转换为 iso 格式。 这是我试图转换的字符串“2016-07-05 02:14:35.0” 我想要这种格式的 iso 8601 “2016-07-05T02:14:35.0”

到目前为止我已经有了

 DateTimeFormatter format = DateTimeFormat.forPattern("YYYY-MM-DDTHH:mm:sszzz");
     new LocalDate();
    LocalDate newDate = LocalDate.parse(created,format);
     created = newDate.toString();

但它给了我这个异常(exception)

ERROR: Illegal pattern component: T; nested exception is java.lang.IllegalArgumentException: Illegal pattern component: T

我按照示例操作,但我不知道我在这里做错了什么。 任何帮助,将不胜感激。

最佳答案

首先,该值是 LocalDateTime不是 LocalDate。如果您想最终获取日期,我会先将其转换为 LocalDateTime,然后获取其中的日期部分。

在执行日期格式化和解析时,请务必非常仔细地阅读文档。看起来您正在使用 Joda Time(由于使用了 forPattern;如果您可以迁移到 Java 8,那将是有益的)。这意味着您应该阅读 DateTimeFormat docs .

您的模式当前存在的问题:

  • 您使用的是“D”而不是“d”;这意味着一年中的某一天
  • 您指定了“T”但没有引用它,而且它并不在模式中
  • 您忽略了值的秒小数部分
  • 当值中没有时区指示符时,您指定了“zz”。

这是一个工作示例:

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2016-07-05 02:14:35.0";
        DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
        LocalDateTime localDateTime = LocalDateTime.parse(text, format);
        System.out.println(localDateTime);
    }
}

如果您实际上想要解析中间带有 T 的值,则可以使用 "yyyy-MM-dd'T'HH 模式:mm:ss.S" - 请注意如何引用 T,以便按字面意思处理它而不是作为格式说明符。

请注意,这只是解析。它不是“将字符串转换为 ISO 日期格式”,而是将字符串转换为 LocalDateTime。如果您随后想要将该值格式化为 ISO 格式,则需要使用具有适当格式的 DateTimeFormatter.print。例如,您可能想要转换为 yyyy-MM-dd'T'HH:mm:ss.S':

格式
import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2016-07-05 02:14:35.0";
        DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
        LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
        DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
        String formatted = printer.print(localDateTime);
        System.out.println(formatted); // Output 2016-07-05T02:14:35.0
    }
}

上面的代码只能处理一位数的秒数。您可以使用 .SSS 而不是 .S 进行解析,但您确实需要计算出在不同情况下您希望输出的内容(例如,对于 100 毫秒,您想要 .1 或 .100?)。

关于java - 将字符串转换为 iso 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38195765/

相关文章:

c# - 如何将 javascript 数字日期转换为 C# 日期(使用 C#,而不是 javascript!)

c# - 如果我调用 C# DateTime.UtcNow 两次,我能否保证在第二次调用中获得更晚的时间?

c# - 如何将字符串列排序为 GridView 中的日期时间列

C# 文本格式 - 对齐无法正常工作

java - Oracle.jdbc.driver.OracleDriver() 不存在错误

java - Double 类型的方法 Deposit(double) 未定义

Python 3.5 字符串格式 : How to add a thousands-separator and also right justify?

python - 格式化带有填充和对齐的 float

java - 如何调用永久命令提示符?

java - 通过用户输入更改变量