我有一个返回DateTime的函数
public DateTime getCreated() {
return jodatime;
}
它以默认的ISO8601格式yyyy-MM-dd'T'HH:mm:ss.SSSZ
返回日期。我想知道我是否可以格式yyyy-MM-dd HH:mm:ss z
返回DateTime。
我在做:
public DateTime getCreated() {
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss z");
DateTime jodatime = dtfOut.parseDateTime(created.toString(dtfOut));
return jodatime;
}
每次返回时,它仍然以默认格式返回。这对我来说很奇怪,因为当我输出created.toString(dtfOut)
时,它会以正确的格式输出日期。所有建议都会返回一个String,但我需要返回类型DateTime
答案 0 :(得分:4)
DateTime
没有格式。它的toString()
确实输出了一种固定的格式,但这主要是一种调试工具。
如果您希望方法返回格式化的日期字符串,则需要返回String
,而不是DateTime
:
private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss z");
String getCreatedAsString() {
return dateTimeFormatter.print(created);
}
将格式与获取created
分开可能更简洁。例如,如果getCreated()
中的File
是一种方法,那么File
就不应该知道任何特定用户界面如何显示它。
在表示层中进行任何格式化。
System.out.println("Created: " + dateTimeFormatter.print(file.getCreated());
答案 1 :(得分:2)
格式仅在将您的日期/时间对象转换为字符串时适用;或者当您从字符串创建数据/时间时。
换句话说:这是"按设计工作"。
日期/时间对象知道没有关于它的格式;或者在某些时候被格式化为!
含义:当getCreated()返回的对象变为字符串时,然后格式开始起作用。当你然后提供你想要的格式; 然后你会得到你所要求的 - 而不是"默认"如果你不提供格式,那就开始了!