2008-11-07 19 views
3

給定UTC時間字符串是這樣的:在Crystal Reports中將UTC字符串轉換爲日期的最佳方法是什麼?

2005-11-01T00:00:00-04:00 

什麼是將其轉換爲使用水晶報表公式日期時間的最佳方式?

我最好的解決辦法是張貼如下。

我希望有人在那裏可以吹我走了一個班輪...

+0

堅持您的解決方案。 「單線程」只是簡化代碼的可讀性。從理論上講,您可能會獲得幾個時鐘週期,但獲得的數量太小而無法解決。 – 2009-05-15 16:19:31

回答

2

在這裏你去:

CDateTime (CDate(Split({UTCDateString},「T」)[1]),CTime(Split(Split({UTCDateString},「T」)[2],「 - 」)[1]))

+0

考慮我被吹走了。謝謝! – JosephStyons 2008-11-07 03:33:19

1

這裏是我的最佳解決方案,搭配點評:

//assume a date stored as a string in this format: 
//2005-11-01T00:00:00-04:00 
//return a DateTime value 
StringVar fieldValue; 
StringVar datePortion; 
StringVar timePortion; 
NumberVar yearPortion; 
NumberVar monthPortion; 
NumberVar dayPortion; 
NumberVar hourPortion; 
NumberVar minutePortion; 
NumberVar secondPortion; 

//store the field locally so i can easily copy-paste into another formula 
//(where the field name will be different) 
//Crystal formulas do not use a powerful language. 
fieldValue := {PACT.ReferralDate}; 

//break up the date & time parts. 
//ignore the -04:00 offset part of the time. 
datePortion := Split (fieldValue,"T")[1]; 
timePortion := Split(Split (fieldValue,"T")[2],"-")[1]; 

yearPortion := ToNumber(Split(datePortion,"-")[1]); 
monthPortion := ToNumber(Split(datePortion,"-")[2]); 
dayPortion := ToNumber(Split(datePortion,"-")[3]); 

hourPortion := ToNumber(Split(timePortion,":")[1]); 
minutePortion := ToNumber(Split(timePortion,":")[2]); 
secondPortion := ToNumber(Split(timePortion,":")[3]); 

//finally, return the result as a date-time 
DateTime(yearPortion,monthPortion,dayPortion,hourPortion,minutePortion,secondPortion); 
3

我可以給jons911的答案建議一個簡化:

CDateTime(CDate(Left({@UTCString}, 10)), CTime(Mid({@UTCString}, 12, 8))); 

這具有這樣的優點,即該公式適用於UTC 0前面的時區(例如, +01:00)。它當然依賴於UTC字符串是正確格式化的ISO 8601字符串。

0
StringVar fieldValue; 
StringVar datePortion; 
StringVar timePortion; 
NumberVar yearPortion; 
NumberVar monthPortion; 
NumberVar dayPortion; 
NumberVar hourPortion; 
NumberVar minutePortion; 
NumberVar secondPortion; 
datetimevar dtlimite; 

fieldValue := {dtsecretaria.Data_limite}; 

datePortion := Split (fieldValue,"T")[1]; 
timePortion := Split(Split (fieldValue,"T")[2],"-")[1]; 

yearPortion := ToNumber(Split(datePortion,"-")[1]); 
monthPortion := ToNumber(Split(datePortion,"-")[2]); 
dayPortion := ToNumber(Split(datePortion,"-")[3]); 

hourPortion := ToNumber(Split(timePortion,":")[1]); 
minutePortion := ToNumber(Split(timePortion,":")[2]); 
secondPortion := ToNumber(Split(timePortion,":")[3]); 

dtlimite := DateTime(yearPortion,monthPortion,dayPortion,hourPortion,minutePortion,secondPortion); 


if dtlimite > CurrentDateTime then 

Color(255,0,0) 

else 

Color(255,255,0) 



error of nError in formula <Back_Color>. \n'\r'\nA string is required here." 
相關問題