Каков наилучший способ преобразования строки UTC в дату в Crystal Reports? - PullRequest
3 голосов
/ 07 ноября 2008

Учитывая строку времени UTC, как это:

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

Как лучше всего преобразовать его в DateTime с помощью формулы Crystal Reports?

Мое лучшее решение опубликовано ниже.

Я надеюсь, что кто-то там может сразить меня одной строчкой ...

Ответы [ 4 ]

3 голосов
/ 14 ноября 2008

Могу я предложить упрощение ответа jons911:

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

Преимущество заключается в том, что формула работает для часовых поясов вперед по UTC 0 (например, +01: 00). Конечно, он полагается на то, что строка UTC является правильно отформатированной строкой ISO 8601.

2 голосов
/ 07 ноября 2008

Вот, пожалуйста:

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

1 голос
/ 07 ноября 2008

Вот мое лучшее решение, с комментариями:

//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);
0 голосов
/ 15 мая 2009
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."
...