编辑:由于某些表面上的混乱,让我澄清一下。如果可能的话,我希望在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);
输入的字符串是我上面提供的字符串。
答案 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
。括号显示了它的解释方式。
如果有人有更好的答案,我会标记为正确,但是几天后,如果没有给出答案,我会将其标记为对可能有相同问题的任何人都是正确的。