2013-01-11 54 views
0

重新计算1981年之前的输入控件中的夏令时(我认为夏令时)。日期项目错误,夏令时

例如 例如我输入27.8.1960 - 保存后我得到26.8.1960,(在下一次保存25.8.1960等等之后) 但是27.8.2010 - 保存之后保持不变:27.8.2010

“Winter日期“:27.4.1960 - 保存后保持不变:27.4.1960

看起来像一个丑陋的错误。我怎么能抑制这个“计算”?

(日期格式为EUROPEEN,我住在德国。1960年8月27日是1960年8月27日)

感谢您的帮助,乌韦

<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> 
+1

文档字段是否保存为* DateTime *,包括正确的时区信息? –

+0

嗨Sven,它被保存为DateTime: 26.08.1960 00:00:00 CEDT 27.08.2010 00:00:00 CEDT (都在笔记本客户端查看) –

+0

嗯...夏令时问题? ??时间存储为CEDT,服务器将其“纠正”为CET(-1小时)。这将导致25.08.1960 23:00:00 CET,然后将其保存为25.08.1960 00:00:00 CEDT等...... –

回答

0

你用战斗的问题是,多米诺存储一个日期时间值与您正在输入日期不存在的夏令时信息。要使用的时区信息来自当前用户区域设置和/或服务器。

你的日期被存储在字段与时区是输入(+ 2H GMT)

26.08.1960 00:00:00 CEDT 

多米诺解释中的存储值,因为它是不调整它

var ndt:NotesDateTime = session.createDateTime("26.08.1960 00:00:00 CEDT"); 
ndt.getGMTTime() 

返回正确的日期时间值,由格林威治标准时间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() 

将导致“1960年8月25日23 :00:00“如果你在CEDT时区。

目前唯一的想法,我有一个简单的解决方法是杀死日期时间字段中的时区信息。为此,您可以使用此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> 
+0

嗨斯文, 感谢您的回答 - 我需要一些时间来验证它(因为我公司的项目管理非常好;-) - 您的解决方法不能解决问题,我认为原因在于var ndt已经拥有错误的日期,所以... ndt.getDateOnly()给我-1日期日期。 Uwe –