【问题标题】:Working with mili second DateTime with culture specific format in Delphi在 Delphi 中使用具有文化特定格式的 mili second DateTime
【发布时间】:2016-04-07 11:15:13
【问题描述】:

我的以下代码在我的系统上运行良好,因为我的系统日期时间格式为 dd-mm-yyyy,但以下代码在系统日期时间格式为 dd/mm/yyyy 的情况下不起作用。

    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 格式的相同代码在我的系统上不起作用。请帮帮我。

【问题讨论】:

  • 那么这怎么行不通呢?它会引发异常还是日期时间格式错误?
  • 问题含糊不清。你说'与 dd/mm/yyyy 相同的代码不起作用'。 dd/mm/yyyy 在哪里?请也显示非工作代码,以便我们了解您的意思。另外,正如 J.Pelttari 所说,请解释“不起作用”的含义。
  • 在我的系统上不起作用不是一个有用的问题描述,除非你告诉我们具体它是如何不起作用。如果您将日期格式正确分配给ShortDateFormat 而不是LongDateFormatFormatDateTime 与您发布的代码完美配合。对于您提供的日期,它会生成 07-04-2016 12:25:56.64
  • 我的问题是,如果我在系统日历格式“'dd-mm-yyyy''上运行上面的代码,它会正常工作。但是,例如我的系统日期时间格式是“M/d/ yy”,上面的代码将在以下行时间出现异常:= StrToDateTime(strDate),异常如下 '07-04-2016 12:25:56.64' is not a valid date and time'。
  • 我不能使用 VarToDateTime,因为 varToDateTime 函数没有以毫秒为单位给出时间。如果我传递的字符串时间长达毫秒,它再次给出异常。

标签: delphi datetime delphi-2006


【解决方案1】:

您的代码使用了LongDateFormatLongTimeFormat,但StrToDateTime() 没有使用这些值。

StrToDate()StrToDateTime() 使用 ShortDateFormat(和 TwoDigitYearCenturyWindow,在这种情况下不适用)来解析日期。

StrToTime()StrToDateTime() 使用硬编码逻辑来解析时间。您无法指定小时/分钟/秒/毫秒值的顺序/存在,您只能指定 TimeSeparatorDecimalSeparatorTimeAMStringTimePMString 值。

试试这个:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多