java - 如何将 SimpleDateFormat 更改为 jodatime?

标签 java datetime jodatime

我需要将 SimpleDateFormat 更改为在 jodatime 中等效的其他格式。 这是需要更改的代码。

public static String dateFormat(Date date, String format)
{
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    return sdf.format(date);
}

我尝试过使用 DateTimeFormatter。

public static String dateFormat(DateTime date, String format)
{
    DateTimeFormatter dtf = DateTimeFormat.forPattern(format);
    DateTime tempDateTime =  dtf.parseDateTime(date.toString());
    return tempDateTime.toString();
}

但是我遇到了错误。

最佳答案

好吧,我在 Joda Time 和 SimpleDateFormat 的文档中找你。如您所见,不幸的是模式定义并不相同。如果您将 SimpleDateFormat 转换为 Joda- DateTimeFormat , 那么你必须注意以下事项:

将 Y 更改为 x(所谓的周-年)。

将 y 更改为 Y(纪元年),也可能更改年表(从 ISO 到 Gregorian/Julian)

Joda Time(一个月中的一周)不支持 W,因此没有替代品!

Joda Time(一个月中的星期几)不支持 F,因此没有替代品!

将 u 更改为 e(星期几 - ISO 顺序,未本地化),自 Java 7 起可用。

符号 S 的处理方式不同(我想在 Joda Time 中更好,因为正确的零填充)。

区域符号 z 在 Joda Time 中不允许解析(也许这是您当前问题的原因 - 您还没有显示您的模式格式或您的异常)。

区域/偏移符号 Z 在 Joda Time 中得到了更好的处理,例如允许在偏移量中使用冒号等。如果您需要后者,您可以在 SimpleDateFormat 中使用 X,它在 Joda Time 中具有替换 Z。

添加了一些测试:

以下示例代码演示了格式符号 S 的不同处理方式。

String s = "2014-01-15T14:23:50.026";
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSS");

DateTime instant = dtf.parseDateTime(s);
System.out.println(dtf.print(instant)); // 2014-01-15T14:23:50.0260

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS");
Date date = sdf.parse(s);
System.out.println(sdf.format(date)); // 2014-01-15T14:23:50.0026 (bad!)

格式符号 z 的另一个测试(这是你的问题吗???):

String s = "2014-01-15T14:23:50.026PST";
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");

DateTime instant = dtf.parseDateTime(s);
System.out.println(dtf.print(instant)); // abort

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2014-01-15T14:23:50.026PST" is malformed at "PST"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)
    at time.JodaTest8.main(JodaTest8.java:83)

SimpleDateFormat 可以进行此区域名称解析(尽管有时至少很危险):

String s = "2014-01-15T14:23:50.026PST";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
Date date = sdf.parse(s);
System.out.println(sdf.format(date)); // 2014-01-15T14:23:50.026PST

关于java - 如何将 SimpleDateFormat 更改为 jodatime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136858/

相关文章:

scala - 多语言环境日期解析

mysql - datetime MySQL 解析日期

java - SmsMessage getOriginatingAddress国家代码从哪里来

java - 如何使用 lambda 计算对象字段中的重复项?

java - 将 POST 数据从 Android 应用程序发送到 PHP MySQL

c# - 如何列出所有月份名称,例如组合?

django - 根据 django 项目中的用户更改时区

java - 在 JodaTime 中使用 Hibernate 注释的问题

java - 使用 Eclipse Link 在 JPA 中映射 Joda Time "Period"的注释

java - 在自然语言中断处拆分字符串