1981年之前的输入控件中的夏季日期被重新计算(我认为是夏令时)。
。例如,我输入27.8.1960 -保存后我得到26.8.1960,(在下一次保存后25.8.1960,以此类推)但27.8.2010 -保存后保持不变:27.8.2010
"Winter dates": 27.4.1960 -保存后保持不变:27.4.1960
看起来像一只丑陋的虫子。我怎样才能抑制这种"计算"?
(日期格式为欧洲,我住在德国。27.8.1960是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>
您要解决的问题是,Domino存储带有夏令时信息的datetime值,而您输入的日期不存在该值。要使用的时区信息来自当前用户区域设置和/或服务器。
您的日期存储在时区字段中,输入 (+2h GMT)
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>