2013-01-11 75 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 –