在formart越南时间,我遇到了错误。美国的语言设置运行良好,但是更改为VN会出现错误。
Error: on line 20, column 11 in 10157#10197#22325
The string doesn't match the expected date/time format. The string to parse was: "CN, 15 thg 7 2018 18:54:00 +0700". The expected format was: "EEE, dd MMM yyyy hh:mm:ss zzz".
我使用liferay 6.2,使用Freemarker模板显示Web内容。这是我的代码。
<#assign articleDisplayDate = .vars['reserved-article-display-date'].data />
<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService" )>
<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")>
<#assign currentArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data)>
<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey()>
<#assign currentArticleAssetEntry = AssetEntryLocalService.getEntry("com.liferay.portlet.journal.model.JournalArticle", currentArticleResourcePrimKey)/>
<div class="wrapcap">
<h3 class="title">
<a href="">${.vars['reserved-article-title'].data}</a>
</h3>
</div>
<div class="datecomm">
<span>
<i class="fa fa-calendar" aria-hidden="true"></i>
<span>${articleDisplayDate?date("EEE, dd MMM yyyy hh:mm:ss zzz")?string("MMMM, dd yyyy")}</span>
</span>
<span><i class="fa fa-eye" aria-hidden="true"></i> Số lượt xem: <span>${currentArticleAssetEntry.viewCount}</span></span>
</div>
<div class="desccomm">
<p></p>
</div>
<div class="contentcomm">
${content.getData()}
</div>
不知道这种日期格式。
答案 0 :(得分:1)
它正在正确报告错误。
让我们一起验证:
该字符串与预期的日期/时间格式不匹配。字符串 解析为:“ CN,2018年7月15日18:54:00 +0700”。预期格式 是:“ EEE,dd MMM yyyy hh:mm:ss zzz”。
“ CN,2018年7月15日18:54:00 +0700”
所以EEE是CN,检查。
dd是15,请检查。
thg是MMM。对此一无所知,请检查。
yyyy是7。在我看来不合适。
hh是2018。绝对不对。
等,等等,等等。
答案 1 :(得分:0)
这是测试结果。
英语:
$ {articleDisplayDate}:2018年7月15日,星期日18:54:00 +0700
$ {。now?string(“ EEE,dd MMM yyyy hh:mm:ss zzz”)}:2018年8月20日,星期一10:46:48 GMT + 07:00
越南语:
答案 2 :(得分:0)
从您提供的样本来看,问题似乎在于您的locale
FreeMarker配置设置是某种英语(请尝试${.locale}
来查看)。解析日期/时间/日期时间,甚至是数字时,当前的区域设置很重要,因为日期和月份等的名称取决于区域设置。
因此,您应该将locale
设置为越南语。通常,locale
FreeMarker配置设置是在模板外部设置的。如果每个模板都使用相同的公用Configuration
对象的单个模板处理的语言环境可以不同,则可以在freemarker.core.Environment
对象上为每个模板分别进行设置。如果由于某种原因必须在模板内设置语言环境,那也是可能的:
<#setting locale="vi_VN">
${"CN, 15 thg 7 2018 18:54:00 +0700"?datetime("EEE, dd MMM yyyy hh:mm:ss zzz")}
还要注意,我使用的是?datetime
,而不是?date
。最后一个表示仅 日期,这可能会导致其他地方出现故障,因为您在那里也有时间。
答案 3 :(得分:0)
https://gsmblog.net/date-objects-liferay-freemarker-web-content-templates/
好像这个错误是由liferay处理得很差的。
我在这里用代码解决了:
<#-- Retrieve the published date meta data field of the web content -->
<#assign articleDisplayDate = .vars['reserved-article-display-date'].data />
<#-- Save the original page locale for later -->
<#assign originalLocale = locale>
<#-- Set the page locale to the portals default locale -->
<#setting locale = 'en_US'>
<#-- Parse the date to a date object use locale en-US -->
<#assign date = articleDisplayDate?date("EEE, dd MMM yyyy hh:mm:ss zzz")>
<#-- Create date time formart use originalLocale (Your site localle) -->
<#assign dateTimeFormat = languageUtil.get(originalLocale, "MMMM, dd yyyy")>
<#-- Result -->
<#assign date = date?string(dateTimeFormat)>