【问题标题】:Convert U.S. TDateTime value to correctly dispay in European format将美国日期时间值转换为以欧洲格式正确显示
【发布时间】:2014-05-04 21:17:52
【问题描述】:

是否有任何简单的选项可以将美国 TDateTime2014 年 4 月 17 日 8:35:38 PM PDT 转换为类似于 2014-04-17 20 的欧洲格式: 35:38

编辑:

我有一个包含美国格式的原始日期/时间的字符串:

var s, new_s: string;
begin
  s := 'Apr 17, 2014 8:35:38 PM PDT';

我想以某种方式将此字符串读取/解析为TDateTime 类型的变量-或- 只需将其转换为所需格式的另一个字符串:

  new_s := MyConvertDateTimeSring(s);
  // now new_s must be '2014-04-17 20:35:38';
end; 

(德尔福 XE4)

【问题讨论】:

  • 没有全球性的欧洲格式。例如,我们在捷克语言环境中使用像 17.4.2014 20:35:38 这样的格式。格式按国家/地区而定。
  • 您知道TDateTime 变量并不是真正的任何一种 格式,对吧?您可以使用您想要的任何字符串格式来格式化日期。
  • 您的问题肯定是如何将日期/时间 string 解析为日期 value
  • @TLama 我不是指任何全球欧洲格式。许多语言环境采用不同的分隔符。事实上,我只是想摆脱美国格式。所以任何转换为​​ yyyy-mm-dd HH:mm:ss 都会让我开心。
  • 不要将文本传递到数据库。不要将日期存储为文本。

标签: delphi tdatetime formatdatetime


【解决方案1】:

如果您从字符串中删除 TimeZone PDT,那么您可以使用 VarToDateTime 将字符串转换为 TDateTime

var
  LDateTimeStr : string;
  LDateTime : TDateTime;
begin
  LDateTimeStr := 'Apr 17, 2014 8:35:38 PM PDT';
  LDateTime := VarToDateTime( Copy( LDateTimeStr, 1, 23 ) );
  WriteLn( FormatDateTime( 'yyyy-mm-dd hh:nn:ss', LDateTime ) );
end;

结果是

2014-04-17 20:35:38

【讨论】:

  • 太棒了!非常感谢你。 VarToDateTimeFormatDateTime 将是我今晚的晚间阅读:) 事实上 LDateTime := VarToDateTime(Copy(LDateTimeStr, 1, Pos(' PDT', LDateTimeStr))); 会更准确一些,因为可能是 4 月 7 日而不是 4 月 17 日。
  • 时区部分在这里可能是非常重要的信息。
  • @TLama 没错,但这不是这个问题的一部分;o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2018-03-03
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多