Datetime 日期项目、夏令时中出错

Datetime 日期项目、夏令时中出错,datetime,xpages,Datetime,Xpages,输入控件中1981年之前的夏季日期会重新计算(我认为是夏令时) e、 g。 e、 g.我进入27.8.1960——在一次扑救后,我得到26.8.1960,(在下一次扑救后,我得到25.8.1960,依此类推) 但2010年8月27日——在一次拯救之后,它保持不变:2010年8月27日 “冬季日期”:27.4.1960-在保存后,它保持不变:27.4.1960 看起来像只丑陋的虫子。我怎样才能抑制这种“计算” (日期格式为Europeen,我住在德国。1960年8月27日是1960年8月27日)

输入控件中1981年之前的夏季日期会重新计算(我认为是夏令时)

e、 g。 e、 g.我进入27.8.1960——在一次扑救后,我得到26.8.1960,(在下一次扑救后,我得到25.8.1960,依此类推) 但2010年8月27日——在一次拯救之后,它保持不变:2010年8月27日

“冬季日期”: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>

您要解决的问题是,Domino存储的datetime值包含夏令时信息,而您输入的日期不存在该信息。要使用的时区信息来自当前用户区域设置和/或服务器

您的日期存储在一个带有输入时区的字段中(+2h GMT)

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>


文档字段是否保存为DateTime,包括正确的时区信息?您好,它保存为DateTime:26.08.1960 00:00:00 CEDT 27.08.2010 00:00:00 CEDT(都在notes客户端中查看)嗯。。。夏令时问题???时间存储为CEDT,服务器将其“更正”为CET(-1小时)。这将导致25.08.1960 23:00:00 CET,然后将保存为25.08.1960 00:00:00 CEDT等…要解决此问题,您可以将时间调整为12:00:00。那么时区的修正不会影响日期本身。但是为什么服务器会修正1981年之前的“夏季日期”,而让1981年以后的日期保持原样呢。。。12:00“变通方法:嗯-我有很多这种形式的日期字段,我希望有一种比在Submit上编写ssjs脚本更简单(更好)的方法,它将所有这些日期都设置为12:00 Hi Sven,谢谢你的回答-我需要一些时间来验证它(因为我公司的项目管理非常好;-)-您的解决方法并不能解决问题,我认为原因是var ndt已经有了错误的日期,因此…ndt.getDateOnly()给了我-1天的日期。Uwe
<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>