Joda DateTime 格式不正确

Joda DateTime improper format

我有一个函数 returns DateTime

public DateTime getCreated() {

  return jodatime;
}

这是return默认 ISO8601 格式的日期 yyyy-MM-dd'T'HH:mm:ss.SSSZ。我想知道我是否可以 return 格式为 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;
}

每次return它仍然return使用默认格式。这对我来说很奇怪,因为当我输出 created.toString(dtfOut) 时,它会以正确的格式输出日期。所有建议都会导致 returning 字符串,但我需要 return 键入 DateTime

Formats 仅在您 convert 您的 date/time 对象为字符串时适用;或者当您从 字符串创建 data/time 时。

换句话说:这是"works as designed"。

date/time 对象对创建它的格式一无所知;或者在某些时候会被格式化为!

含义:当getCreated()返回的对象变成字符串时,然后格式开始发挥作用。当您 然后 提供您想要的格式时; 然后 你会得到你想要的东西 - 而不是 "default" 如果你不提供格式就会出现!

A DateTime 没有 格式。它的 toString() 确实输出某种固定的格式,但这主要是一个调试工具。

如果你想让你的方法return一个格式化的日期字符串,那么它需要return一个String,而不是DateTime:

private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss z");

String getCreatedAsString() {
    return dateTimeFormatter.print(created);
}

将格式化与获取 created 分开可能更简洁。例如,如果 getCreated()File 中的一个方法,那么 File 应该不知道任何特定的 UI 是如何显示它的。

在您的表示层中进行任何格式设置。

System.out.println("Created: " + dateTimeFormatter.print(file.getCreated());