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



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

我现在有这个

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

但是它给了我这个异常

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

我遵循了例子,我不知道我在这里做错了什么。任何帮助都会很感激。

首先,该值是LocalDateTime而不是 LocalDate。如果你想在最后得到一个日期,我会先把它转换成一个LocalDateTime,然后把日期部分。

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

当前模式的问题:

  • 您正在使用'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毫秒,您想要0.1还是。100?)

你的代码中有一些错误:

  • 模式应为'yyyy-MM-dd HH:mm:ss.SSS'。注意upper-
    和小写。
  • 使用LocalDateTime获取日期和时间。LocalDate只保存日期。

更正后的代码:

String created = "2016-07-05 02:14:35.000";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime newDate = LocalDateTime.parse(created,format);
created = newDate.toString();
System.out.println(created);

使用以下格式转换

     String format = "yyyy-mm-dd hh:mm:ss"

您正在使用错误的格式转换。使用T只是为了将日期和时间分开。使用如下格式

     String = "yyyy-MM-dd'T'HH:mm:ss" 

相关内容

  • 没有找到相关文章

最新更新