我的cq对话框中有一个属性,其xtype是datetime。值在cq中存储为“2016-04-11T03:00:00.000-04:00”,属性名称为eventDate。
我想知道两件事 -
任何指针都将受到高度赞赏。
答案 0 :(得分:0)
不确定使用方法是否正确。
提供替代解决方案 -
您可能在包含datetime属性的节点上使用了jcr api。
java.text.SimpleDateFormat
api可用于有效地提取日期和时间。
例如:
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
dateFormat.format(node.getProperty(eventDate).getValue().getDate().getTime())
与日期时间中的持久日期类似,您可以使用com.day.cq.commons.date.DateUtil
api
node.setProperty(propertyName, DateUtil.parseISO8601(DateUtil.getISO8601Date(Calendar.getInstance())))
答案 1 :(得分:0)
I guess the missing part is, you are not adding the use class。你应该这样做:
<div data-sly-use.eventUseObj = "com.test.models.EventModel" data-sly-unwrap />
相应的java use类应该覆盖这样的activate()方法:
public class EventModel extends WCMUse {
private String eventDate;
@Override
public void activate() {
Calendar eventCalendar = getProperties().get("eventDate", Calendar.class);
DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
eventDate = outputFormat.format(eventCalendar.getTime());
}
}
现在,这个日期可以像这样轻松地使用:
$ {eventUseObj.eventDate}
这将打印页面上的日期值。 SimpleDateFormat支持安培数量的日期模式,您可以选择所需的日期模式。
答案 2 :(得分:0)
这是一个使用javascript UseAPI的简单示例,逻辑应该适用于Java UseAPI
dateformater.js文件:
"use strict";
//dateformatter.js
use(function () {
var formattedDate = new java.text.SimpleDateFormat(this.mask).format(this.date);
return {
formattedDate: formattedDate
};
});
&#13;
和HTL(Sightly)标记示例:
<h1 data-sly-use.formatter="${'dateformatter.js' @ date=properties.eventDate.time, mask='dd/MM/yyyy hh:mm:ss'}">
Event date formatted: ${formatter.formattedDate}
</h1>
&#13;
答案 3 :(得分:0)
Sightly具有支持格式化字符串,日期和数字的内置函数。这是您将日期格式化为特定格式的方法。
${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date, timezone='UTC'}
${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date, timezone='GMT+02:00'}
timezone参数是可选的,因此,如果要将时间设为默认时区,则可以省略timezone参数。
${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date}
您可以在此处详细了解-https://github.com/adobe/htl-spec/blob/1.3/SPECIFICATION.md#1222-dates