如何用Thymeleaf打印指定时区的日期和时间?就像是:

<span th:text="${#dates.format(myDate, 'yyyy-MM-dd HH:mm', 'PST')}">2010-01-01 16:30</span>

最佳答案

当我对这个问题感到困惑时,我进行了广泛的搜索以寻找可能的解决方案。

这些是我的发现:
我没有发现任何干净的功能来更改时区并像在jsp中一样显示它:

<fmt:timeZone value="US">
<fmt:formatDate value="${today}"  type="both" />
</fmt:timeZone>

可行的可行解决方案是使用createForTimeZone创建日历实例并对其进行格式化,因为它返回了原始日历值,因此从此开始:
#calendars.createForTimeZone(year, month, day, hour, minute, second, milisecond, Object timezone)

你会得到像这样的东西:
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="PST",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=PST,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=1,WEEK_OF_YEAR=14,WEEK_OF_MONTH=1,DAY_OF_MONTH=24,DAY_OF_YEAR=91,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=6,HOUR_OF_DAY=7,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-28800000,DST_OFFSET=3600000]

如您所见(必须仔细查看),它确实将时间转换为提供的时区。

现在,我还没有达到可以使所有功能正常工作的地步,但是如果在此之前添加calendars.format,则可以正确显示给定时区的时间。 ${#calendars.format(#calendars.createForTimeZone(year, month, day, hour, minute, second, milisecond, Object timezone), 'dd-MMM-yyyy HH:mm')}
在字符串末尾添加“zzz”,始终返回我的语言环境时区。我想有办法解决这个问题,使它看起来更好,但是对我来说,重点是要找出是否有可能。

有效的示例:
${#dates.format(#calendars.createForTimeZone(#calendars.year(ticket.ticketDate), #calendars.month(ticket.ticketDate), #calendars.day(ticket.ticketDate), #calendars.hour(ticket.ticketDate), #calendars.minute(ticket.ticketDate),'PST'), 'yyyy-MMM-dd HH:mm')}

${#calendars.format(#calendars.createForTimeZone(#calendars.year(ticket.ticketDate), #calendars.month(ticket.ticketDate), #calendars.day(ticket.ticketDate), #calendars.hour(ticket.ticketDate), #calendars.minute(ticket.ticketDate),'CET'), 'yyyy-MMM-dd HH:mm')}

并且任何一个都将返回相同的结果。

以下是使用PST和CET比较相同格式时的结果:
2014-Feb-24 16:00
2014-Feb-24 07:00

或者:
2014-Mar-01 03:00
2014-Feb-28 18:00

问候,

09-15 23:19