【发布时间】:2019-07-11 08:56:24
【问题描述】:
编辑:由于一些看似混乱,让我澄清一下。如果可能的话,我希望在 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);
输入的字符串是我上面提供的字符串。
【问题讨论】:
-
你可以使用 java 8 中的 LocalDateTime
-
它显示您所要求的时区,
z在模式的末尾。至于“按原样”显示时间,没有这样的事情,因为输入字符串中有一个时区。但是,如果您将 FreeMarker 的时区配置设置为 GMT+02,您将按原样返回时间。这行得通吗? -
@ddekany 是的,如果模板中的所有日期都使用相同的时区,这将起作用。如果我想“按原样”显示
12:00+03:00 - 16:00+02:00,那么它将打印为12:00 - 16:00。如果我设置一个模板时区,那么其中一个时间会相差一小时。 -
@NoobsDeSroobs 所以在这种情况下你想显示
12:00和16:00?这很奇怪,因为没有一个时区是正确的当地时间。无论如何,如果这仍然是需要的,那么你必须像你一样从字符串中删除时区,这样它们实际上就变成了本地日期时间。 -
@ddekany 是的,我的时间与不同的时区有关,因此我必须根据这些时区显示时间。想象一张机票。出发和到达时区分别反映在每个显示的日期和时间中。谢谢。
标签: java datetime timezone freemarker