我想将系统日期时间转换为特定格式.我的系统格式是dd/mm/yy我想转换为mm/dd/yyyy,所以我使用的是StrToDateDef.我只需要使用StrToDateDef因为日期是字符串,如果有一个字符串而不是日期我将使用默认日期.我的代码如下
str := '30/01/14';
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FmtStngs);
FmtStngs.DateSeparator := '/';
FmtStngs.ShortDateFormat := 'mm/dd/yyyy';
FmtStngs.TimeSeparator := ':';
FmtStngs.LongTimeFormat := 'hh:nn';
date := StrToDateDef(str,01/28/2013,FmtStngs);
Run Code Online (Sandbox Code Playgroud)
我期待这个日期是'01/30/2014',但它将以'30/01/14'的形式出现.我做错了什么?
这段代码中有几个错误:
首先,TFormatSettings您传递给StrToDateDef例程的是您传递的字符串的格式设置(而不是出现的日期时间变量,稍后将详细介绍).
当你传递'30/01/14'你ShortDateFormat应该'dd/mm/yyyy'而不是'mm/dd/yyyy'
然后你传递的默认值等于在12.12.1899午夜之后的1ms(因为你实际上传递1除以28除以2014).使用EncodeDate(2013, 1, 28)从DateUtils.pas.
然后你说
我期待这个日期是'01/30/2014',但它将以'30/01/14'的形式出现.
那么你正在查看一个TDateTime变量,它将根据调试器的windows系统的本地设置进行格式化.而已.你没有一个字符串,而是一个浮点值(这是TDateTime所代表的),它以字符串形式呈现给你,使其可读.
另外我认为结果应该是传递的默认日期,因为传递的ShortDateFormat与您传递的字符串的值不匹配(尝试将30放入月份部分).
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |