日期项错误,夏令时



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>

相关内容

  • 没有找到相关文章

最新更新