重新计算1981年之前输入控件中的夏季日期(我认为夏令时)。
e.g。 例如我输入了27.8.1960 - 保存之后我得到了26.8.1960,(在下一次保存后的25.8.1960等等)之后 但是在2010年8月27日 - 保存之后它保持不变:27.8.2010
“冬季约会”:27.4.1960 - 保存之后保持不变:27.4.1960
看起来像一个丑陋的小虫。我怎么能压制这个“计算”?
(日期格式为Europeen,我住在德国。1960年8月27日是1960年8月27日)
感谢任何帮助,Uwe
<xp:inputText value="#{Auftrag.MF_GebDatum}" id="mF_GebDatum1" style="width:255px">
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
</xp:inputText>
答案 0 :(得分:0)
您正在解决的问题是Domino存储日期时间值以及您输入的日期不存在的夏令时信息。要使用的时区信息来自当前用户区域设置和/或服务器。
您的日期存储在一个字段中,其中包含输入的时区(+格林威治标准时间2小时)
26.08.1960 00:00:00 CEDT
Domino按原样解释存储的值,而不进行调整
var ndt:NotesDateTime = session.createDateTime("26.08.1960 00:00:00 CEDT");
ndt.getGMTTime()
返回正确的日期时间值,GMT调整2小时
25.08.60 22:00:00 GMT
虽然转换回Java,但它被正确地解释为1960年从未有过夏令时,这就是为什么它只能调整1小时:
var ndt:NotesDateTime = session.createDateTime("26.08.1960 00:00:00 CEDT");
ndt.toJavaDate().toLocaleString()
如果您在CEDT时区,将导致“25.08.1960 23:00:00”。
目前,我有一个简单的解决方法是杀死DateTime字段中的时区信息。为此,您可以使用此SSJS脚本:
<xp:this.querySaveDocument>
<![CDATA[#{javascript:
var doc:NotesDocument = document1.getDocument( true );
var items:java.util.Vector = doc.getItems();
var item:NotesItem;
var ndt:NotesDateTime;
var dt:java.util.Date;
for( var i=0; i<items.size(); i++){
item = items.get(i);
if( item.getType() === 1024 ){
ndt = item.getValueDateTimeArray().get(0);
ndt = session.createDateTime( ndt.getDateOnly());
item.setDateTimeValue( ndt );
ndt.recycle();
}
item.recycle();
}
}]]>
</xp:this.querySaveDocument>