如何在 Freemarker 模板或 javascript 中以特定格式转换日期
How to convert date in specific format in Freemarker template or javascript
从 json 中,我得到的值是
"createdOn": "Jan 08 2015 20:40:56 GMT+0530 (IST)",
我正在超光速访问
<#list variables as variable>
<div class="reply">
${variable.createdOn}
</div>
</#list>
我得到的结果是
Jan 09 2015 12:36:18 GMT+0530 (IST)
我喜欢的格式是
09-01-2015
我需要删除其余时间 GMT、IST 等。
如何在 Freemarker 模板或 javascript 中转换它。
更新
我试过这样通过下面
${variable.createdOn?datetime?string("dd-MM-yyyy")}
但它报错为
Exception: java.text.ParseException - Unparseable date: "Jan 09 2015 12:36:18 GMT+0530 (IST)"
感谢任何帮助。
谢谢
你试过吗?
"${variable.createdOn?datetime?string('dd-MM-yyyy')}"
您可以创建自己的自定义函数并使用 getDate
、getMonth
和 getFullYear
方法来设置日期格式。
请注意,您必须将字符串日期格式解析为日期对象。
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display todays day of the month in dd-MM-yyyy format.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var d = new Date("Jan 08 2015 20:40:56 GMT+0530 (IST)"); //parsing your string date format into Date object.
var z = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear();
document.getElementById("demo").innerHTML = z;
}
</script>
</body>
</html>
function convertDate( date ){
dateSplit = date.toString().split( ' ' );
dateSplit[1] = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1).toString() : date.getMonth() + 1;
return dateSplit[2] + '-' + dateSplit[1] + '-' + dateSplit[3];
}
convertDate(new Date());
这应该可以完成工作。您可以另外调整它
首先,那到底是什么格式?我的意思是,如果您可以影响某人改用标准格式(主要是 ISO),那将对每个人都有帮助。无论如何,FreeMarker 不是日期解析器库,但实际上你可以这样做:
<#-- Settings you need -->
<#setting date_format="dd-MM-yyyy">
<#setting locale="en_US">
<#-- The string that comes from somewhere: -->
<#assign createdOn = 'Jan 08 2015 20:40:56 GMT+0530 (IST)'>
<#--
1. Tell FreeMarker to convert string to real date-time value
2. Convert date-time value to date-only value
3. Let FreeMarker format it according the date_format setting
-->
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}
我是这样走的。我创建了一个对象 - 格式化程序并将其传递到模板模型中。我在模板中调用 formatter.format(date)。
template.ftl
<div class="historyOrderItem">
<div>
<div>Created <#if order.created??>${formatter.format(order.created)}</#if></div>
<div>Amount ${order.amount!}</div>
<div>Currency ${order.currency!}</div>
</div>
OrderPresenter.java
@Component
public class OrderPresenter {
private static final String FORMATTER_PARAM = "formatter";
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).withZone(ZoneId.systemDefault());
private Configuration configuration = prepareConfiguration();
public String toHtmlPresentation(ClientDetails clientDetails) {
try {
Template template = configuration.getTemplate(CLIENT_DATA_TEMPLATE);
Writer out = new StringWriter();
template.process(toMap(clientDetails), out);
return out.toString();
} catch (IOException | TemplateException e) {
throw new RuntimeException(e);
}
}
private Configuration prepareConfiguration() {
Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
configuration.setDefaultEncoding(ENCODING);
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setLogTemplateExceptions(NOT_TO_LOG_EXCEPTIONS);
configuration.setClassForTemplateLoading(OrderPresenter.class, TEMPLATES_FOLDER);
return configuration;
}
private Map<String, Object> toMap(ClientDetails clientDetails) {
Map<String, Object> res = new HashMap<>();
res.put(CLIENT_DETAILS_PARAM, clientDetails);
res.put(FORMATTER_PARAM, FORMATTER);
return res;
}
}
template.ftl
<#list listaCategoria as c>
<tr>
<td> ${c.dataCadastro?datetime("yyyy-MM-dd")?string("dd/MM/yyyy")}</td>
</tr>
</#list>
RelatorioService.java
LocalDate dataCadastro = LocalDate.of(1995, 12, 7);
结果:
07/12/1995
从 json 中,我得到的值是
"createdOn": "Jan 08 2015 20:40:56 GMT+0530 (IST)",
我正在超光速访问
<#list variables as variable>
<div class="reply">
${variable.createdOn}
</div>
</#list>
我得到的结果是
Jan 09 2015 12:36:18 GMT+0530 (IST)
我喜欢的格式是
09-01-2015
我需要删除其余时间 GMT、IST 等。
如何在 Freemarker 模板或 javascript 中转换它。
更新
我试过这样通过下面
${variable.createdOn?datetime?string("dd-MM-yyyy")}
但它报错为
Exception: java.text.ParseException - Unparseable date: "Jan 09 2015 12:36:18 GMT+0530 (IST)"
感谢任何帮助。
谢谢
你试过吗?
"${variable.createdOn?datetime?string('dd-MM-yyyy')}"
您可以创建自己的自定义函数并使用 getDate
、getMonth
和 getFullYear
方法来设置日期格式。
请注意,您必须将字符串日期格式解析为日期对象。
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display todays day of the month in dd-MM-yyyy format.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var d = new Date("Jan 08 2015 20:40:56 GMT+0530 (IST)"); //parsing your string date format into Date object.
var z = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear();
document.getElementById("demo").innerHTML = z;
}
</script>
</body>
</html>
function convertDate( date ){
dateSplit = date.toString().split( ' ' );
dateSplit[1] = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1).toString() : date.getMonth() + 1;
return dateSplit[2] + '-' + dateSplit[1] + '-' + dateSplit[3];
}
convertDate(new Date());
这应该可以完成工作。您可以另外调整它
首先,那到底是什么格式?我的意思是,如果您可以影响某人改用标准格式(主要是 ISO),那将对每个人都有帮助。无论如何,FreeMarker 不是日期解析器库,但实际上你可以这样做:
<#-- Settings you need -->
<#setting date_format="dd-MM-yyyy">
<#setting locale="en_US">
<#-- The string that comes from somewhere: -->
<#assign createdOn = 'Jan 08 2015 20:40:56 GMT+0530 (IST)'>
<#--
1. Tell FreeMarker to convert string to real date-time value
2. Convert date-time value to date-only value
3. Let FreeMarker format it according the date_format setting
-->
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}
我是这样走的。我创建了一个对象 - 格式化程序并将其传递到模板模型中。我在模板中调用 formatter.format(date)。
template.ftl
<div class="historyOrderItem">
<div>
<div>Created <#if order.created??>${formatter.format(order.created)}</#if></div>
<div>Amount ${order.amount!}</div>
<div>Currency ${order.currency!}</div>
</div>
OrderPresenter.java
@Component
public class OrderPresenter {
private static final String FORMATTER_PARAM = "formatter";
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).withZone(ZoneId.systemDefault());
private Configuration configuration = prepareConfiguration();
public String toHtmlPresentation(ClientDetails clientDetails) {
try {
Template template = configuration.getTemplate(CLIENT_DATA_TEMPLATE);
Writer out = new StringWriter();
template.process(toMap(clientDetails), out);
return out.toString();
} catch (IOException | TemplateException e) {
throw new RuntimeException(e);
}
}
private Configuration prepareConfiguration() {
Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
configuration.setDefaultEncoding(ENCODING);
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setLogTemplateExceptions(NOT_TO_LOG_EXCEPTIONS);
configuration.setClassForTemplateLoading(OrderPresenter.class, TEMPLATES_FOLDER);
return configuration;
}
private Map<String, Object> toMap(ClientDetails clientDetails) {
Map<String, Object> res = new HashMap<>();
res.put(CLIENT_DETAILS_PARAM, clientDetails);
res.put(FORMATTER_PARAM, FORMATTER);
return res;
}
}
template.ftl
<#list listaCategoria as c>
<tr>
<td> ${c.dataCadastro?datetime("yyyy-MM-dd")?string("dd/MM/yyyy")}</td>
</tr>
</#list>
RelatorioService.java
LocalDate dataCadastro = LocalDate.of(1995, 12, 7);
结果:
07/12/1995