次のような UTC 時間文字列が与えられます。
2005-11-01T00:00:00-04:00
Crystal Reports 式を使用して DateTime に変換する最良の方法は何ですか?
私の最善の解決策を以下に掲載します。
誰かがワンライナーで私を吹き飛ばしてくれることを願っています...
次のような UTC 時間文字列が与えられます。
2005-11-01T00:00:00-04:00
Crystal Reports 式を使用して DateTime に変換する最良の方法は何ですか?
私の最善の解決策を以下に掲載します。
誰かがワンライナーで私を吹き飛ばしてくれることを願っています...
jons911の答えを単純化することをお勧めします:
CDateTime(CDate(Left({@UTCString}, 10)), CTime(Mid({@UTCString}, 12, 8)));
これには、式が UTC 0 (例: +01:00) より前のタイム ゾーンで機能するという利点があります。もちろん、UTC 文字列が適切にフォーマットされた ISO 8601 文字列であることに依存しています。
どうぞ:
CDateTime(CDate(Split({?UTCDateString}, "T")[1]) , CTime(Split(Split({?UTCDateString}, "T")[2], "-")[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);
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."