Joda DateTime格式不正确

时间:2017-01-10 16:43:07

标签: java datetime jodatime

我有一个返回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

2 个答案:

答案 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()返回的对象变为字符串时,然后格式开始起作用。当你然后提供你想要的格式; 然后你会得到你所要求的 - 而不是"默认"如果你不提供格式,那就开始了!