我需要将 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/