You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FTL中编写日期格式?多区域过期日期转换需求

基于区域设置的过期日期转换实现方案

需求说明

  • 澳大利亚(en_AU)
    • 输入日期字符串:Ends 31 Jul, 2022 23:59:59 AEST.
    • 预期输出格式:Ends 31 Jul 2022
  • 法国(fr_FR)
    • 输入日期字符串:Expire le juil. 31, 2022
    • 预期输出格式:Expire le 31 juil. 2022

FreeMarker 实现方案

核心思路是先将输入的文本字符串解析为日期对象,再根据对应区域设置(locale)格式化输出,同时保留前缀文本。直接用分支判断处理不同locale的逻辑即可:

<#-- 模拟输入的过期日期字符串,可替换为实际数据源 -->
<#assign expiredOnStr = "Ends 31 Jul, 2022 23:59:59 AEST." />
<#-- 当前使用的区域设置,可从系统或配置中获取 -->
<#assign currentLocale = "en_AU" />

<#-- 按区域设置分支处理 -->
<#if currentLocale == "en_AU">
    <#-- 解析澳式日期字符串为日期对象 -->
    <#assign expiredDate = expiredOnStr?datetime("Ends dd MMM, yyyy HH:mm:ss zzz.", "en_AU") />
    <#-- 按预期格式输出 -->
    Ends ${expiredDate?string("dd MMM yyyy", "en_AU")}
<#elseif currentLocale == "fr_FR">
    <#-- 解析法式日期字符串为日期对象 -->
    <#assign expiredDate = expiredOnStr?datetime("Expire le MMM. dd, yyyy", "fr_FR") />
    <#-- 按预期格式输出 -->
    Expire le ${expiredDate?string("dd MMM.", "fr_FR")} ${expiredDate?string("yyyy", "fr_FR")}
<#else>
    <#-- 默认降级逻辑,直接输出原字符串 -->
    ${expiredOnStr}
</#if>

代码说明

  1. 字符串转日期:使用?datetime(格式模板, locale)方法,严格匹配输入字符串的格式和区域,将文本转换为FreeMarker可处理的日期对象。
  2. 日期格式化输出:通过?string(格式模板, locale)将日期对象按目标格式输出,澳式直接用dd MMM yyyy,法式拆分拼接以匹配需求中的顺序。
  3. 分支逻辑:用<#if>判断当前locale,确保不同区域的输入输出都符合格式要求。

测试验证

  • 当currentLocale = "en_AU"、expiredOnStr = "Ends 31 Jul, 2022 23:59:59 AEST."时,输出:Ends 31 Jul 2022
  • 当currentLocale = "fr_FR"、expiredOnStr = "Expire le juil. 31, 2022"时,输出:Expire le 31 juil. 2022

内容的提问来源于stack exchange,提问作者R34P3R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:54:16