2016-04-07 2 views
0

У меня есть код, который отлично работает в моей системе, так как мой формат даты в формате dd-mm-yyyy, но ниже код не работает, где дата формат системы - dd/mm/yyyy.Работа с mili second DateTime с конкретным форматом для культуры в Delphi

try 
      fmt.LongDateFormat:='dd-mm-yyyy'; 
      fmt.DateSeparator :='-'; 
      fmt.LongTimeFormat :='hh:nn:ss.z'; 
      fmt.TimeSeparator :=':' ; 

      dateTime :=42467.51801; 
      strDate :=FormatDateTime('dd-mm-yyyy hh:nn:ss.z', dateTime); 
      time := StrToDateTime(strDate,fmt); 

      strDate :=FormatDateTime('dd-mm-yyyy hh:nn:ss.z', time); 
     ShowMessage('DateTime := ' +strDate) ; 
     except 
     on e: Exception do 
      ShowMessage('Exception message = '+e.Message); 
end; 

тот же код в формате dd/mm/yyyy не работает в моей системе. Пожалуйста, помогите мне.

+0

Так как это не работает? Вызывает ли это исключение или отформатировано datetime неправильно? –

+0

Вопрос неоднозначный. Вы говорите: «тот же код с dd/mm/yyyy не работает». dd/mm/yyyy где? Пожалуйста, покажите нерабочий код, чтобы мы могли понять, что вы имеете в виду. Кроме того, как говорит Дж. Пелттари, объясните, что вы подразумеваете под «не работает». – Dsm

+0

* не работает в моей системе * не является полезным описанием проблемы, если вы не сообщите нам ** конкретно **, как это * не работает *. 'FormatDateTime' отлично работает с кодом, который вы опубликовали, если вы правильно назначили формат даты' ShortDateFormat' вместо 'LongDateFormat'. На дату, указанную вами, вы получаете '07-04-2016 12: 25: 56.64'. –

ответ

1

Ваш код использует LongDateFormat и LongTimeFormat, но StrToDateTime() не использует эти значения.

StrToDate() и StrToDateTime() использование ShortDateFormatTwoDigitYearCenturyWindow, который не применяется в данном случае), чтобы разобрать даты.

StrToTime() и StrToDateTime() использовать жестко закодированную логику для разбора времени. Вы не можете указать порядок/наличие значений часа/минуты/секунды/миллисекунды, вы можете указать только значения TimeSeparator, DecimalSeparator, TimeAMString и TimePMString.

Попробуйте вместо этого:

try 
    fmt.ShortDateFormat := 'dd/mm/yyyy'; 
    fmt.DateSeparator := '/'; 
    fmt.TimeSeparator := ':'; 
    fmt.DecimalSeparator := '.'; 

    dateTime := 42467.51801; 
    strDate := FormatDateTime('dd/mm/yyyy hh:nn:ss.z', dateTime, fmt); 
    time := StrToDateTime(strDate, fmt); 

    strDate := FormatDateTime('dd/mm/yyyy hh:nn:ss.z', time, fmt); 
    ShowMessage('DateTime := ' + strDate); 
except 
    on e: Exception do 
    ShowMessage('Exception message = '+e.Message); 
end; 
Смежные вопросы