如何将日期时间显示为本地时间而不以时区结尾?

时间:2019-07-11 08:56:24

标签: java datetime timezone freemarker

编辑:由于某些表面上的混乱,让我澄清一下。如果可能的话,我希望在freemarker中而不是在Java中完成解决方案。

我有一个如下所示的日期时间字符串:2019-03-12T16:02:00+02:00 我必须以以下特定格式显示此内容:EEEE dd. MMMM yyyy HH:mm 但是,如果我这样做,它会将时间显示为14:02而不是16:02。 它将日期时间转换为UTC,然后显示它。如何使它原样显示小时和分钟,而最后没有“ utc”?或任何与此相关的时区。 Tuesday 12. March 2019 16:02是所需的输出。

我不知道收件人的时区。

使用iso_local_nz给我美国标准显示,仍然是错误的。

谢谢。

我几乎尝试过所有可以想到的事情:https://freemarker.apache.org/docs/ref_builtins_date.html#ref_builtin_date_iso

departureScheduled?datetime.iso?string("EEEE dd. MMMM yyyy HH:mmz")?capitalize

我使用的配置如下:

config = new Configuration(Configuration.VERSION_2_3_28);
config.setTemplateLoader(new S3TemplateLoader());
config.setDefaultEncoding("UTF-8");
config.setLocalizedLookup(false);
config.setLocale(Locale.forLanguageTag("NO"));
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

输入的字符串是我上面提供的字符串。

2 个答案:

答案 0 :(得分:0)

使用类java.time.OffsetDateTime来处理偏移量:

public static void main(String[] args) {
    String t = "2019-03-12T16:02:00+02:00";
    OffsetDateTime odt = OffsetDateTime.parse(t);
    System.out.println(odt.format(DateTimeFormatter.ofPattern("EEEE dd. MMMM yyyy HH:mm")));
}

这将打印Dienstag 12. März 2019 16:02,翻译取决于您的系统默认设置Locale

  

请注意,您期望的输出将不会通过正确的代码生成,因为2019年3月12日是星期二而不是星期一。

答案 1 :(得分:0)

到目前为止,这并不是一个好的解决方案,但是它适用于我遇到的一种情况,即我想显示的时间在解析之前的原始字符串中。

jq --raw-output '.get.download.detail[] | .dumpInfo.dumpName, .datastore[0].param1, .datastore[1].param1'

请注意 departureScheduled?keep_before("+")?datetime.iso?string("EEEE dd. MMMM yyyy HH:mm")?capitalize

上述解决方案的工作原理是删除keep_before("+")+之后的所有内容。然后,datetime解析器假定时间为UTC。因此,我通过使用内置的字符串操作函数来避免整个问题,该函数返回不会进一步修改的子字符串:2019-03-12T16:02:00+02:00。括号显示了它的解释方式。

如果有人有更好的答案,我会标记为正确,但是几天后,如果没有给出答案,我会将其标记为对可能有相同问题的任何人都是正确的。