datetime - delphi中如何将字符串转换为日期
问题描述
当我将string
类型转换TDateTime
为时出现错误。我正在使用VarToDateTime
功能。我作为字符串的日期是2018-07-11T13:45:14.363
.
var
s: string;
v: Variant;
dt: TDateTime;
begin
s := '2018-07-11T13:45:14.363';
v := s;
dt := VarToDateTime(v);
end;
解决方案
从string
到TDateTime
using的转换是否成功VarToDateTime
取决于用户系统中的区域设置。如果这些设置与字符串不匹配,则转换失败。这就是为什么在我的系统上转换失败的原因,在你的系统上也是如此。
如果您使用的是 Delphi XE6 或更高版本,主要选项是使用Marc Guillot在另一个答案ISO8601ToDate()
中建议的功能
如果您使用的是 Delphi 2010 或更高版本,则可以使用此处提供的解决方案。
早于 Delphi 2010 的版本会在输入字符串中阻塞“T”,如果“T”被删除或替换为空格,则可能会成功。
使用一个转换函数,该函数接受一个TFormatSetting
可以根据要转换的字符串进行调整的转换函数。这样的功能是以下重载StrToDateTime()
(参见Embarcadero 文档)
function StrToDateTime(const S: string; const AFormatSettings: TFormatSettings): TDateTime;
设置AFormatSettings
匹配要转换的字符串,确保转换成功:
procedure TForm3.Button1Click(Sender: TObject);
var
fs: TFormatSettings;
s: string;
dt: TDateTime;
begin
fs := TFormatSettings.Create;
fs.DateSeparator := '-';
fs.ShortDateFormat := 'yyyy-MM-dd';
fs.TimeSeparator := ':';
fs.ShortTimeFormat := 'hh:mm';
fs.LongTimeFormat := 'hh:mm:ss';
s := '2018-07-11T13:45:14.363';
dt := StrToDateTime(s, fs);
end;
推荐阅读
- oracle - 实体获取器访问数据库
- sql - 将两个值与 SQL 中的其他两个特定值进行比较
- node.js - 通过公共 Apache 服务器访问服务器 LAN 中的 node.js、mongo DB
- optimization - Julia JuMP 中的多维字符串变量
- angular - VSCode 无法识别模板中的变量
- python - 当问题字符串反转时,Chatter 机器人返回错误响应
- c# - 当我在 iis 和 mvc5 上上传文件时,文件路径被拒绝
- python - 如何使用 Python 查找当前连接(LAN 或 WiFi)的 IP 地址?
- javascript - 为什么 Javascript 不显示结果
- xamarin.forms - Xamarin 表单的 Twilio 视频