您的位置:首页 > 编程语言 > Delphi

delphi —StrToDateTime函数在不同系统出现错误的解决方案

2014-03-21 14:29 375 查看
原创来源:http://blog.csdn.net/cwpoint/article/details/6525213

Delphi提供了很多关于时间和日期的函数,非常方便。

引用

但是有时候一个疏忽导致你不知道错在哪里。

类似Java的Date().getTime()函数,它返回1970年1月1日8点(UTC+8)到当前时间之间的毫秒数。

在Delphi中用MinutesBetween函数就可以得到2个时间相差的毫秒数了。

首先必须将1970年1月1日8点转换为TDateTime类型,我就是在程序中这样写了一句

StrToDateTime('1970-01-01 08:00:00');

这句代码没有任何问题吧?你会发现在Windows7上出现错误,提示时间无效,但是这个时间确实没有错误,到底怎么回事?

其实大家看看Windows7的区域和语言设置便知道,看到日期了吗,是用"/"将年月日连接起来的,而在Xp系统是用"-"连接的。

这样就好解决这个错误了,直接把日期中的"-"改成"/",但这不是最好的办法,极不可取,程序员必须找到通用的办法,不管你系统格式设置的什么,都不影响我们的程序。

于是我找到了EncodeDateTime函数,直接用它转换成TDateTime类型

EncodeDateTime(1970, 1, 1, 8, 0, 0, 0)

EncodeDateTime函数的参数是:EncodeDateTime(年, 月, 日, 时, 分, 秒, 毫秒)

如果程序非得用StrToDateTime函数,那只能自己处理字符串再用EncodeDateTime转换为TDateTime类型,目前我还没有找到更好的办法。

我的建议就是在保存时间的时候不要加连接符号,用FormatDateTime函数格式化日期和时间,请看下面。

FormatDateTime('yyyy/MM/dd HH:mm:ss',Now)

它返回的日期还是用"-"连接的,这与系统设置有关,所以我们最好不用连接符,直接

FormatDateTime('yyyyMMdd HH:mm:ss',Now)

这样读取就有固定的格式了,也好处理,就说这么多,发现错误再来补充。

时间差的函数是*Between这样的形式,比如

YearsBetween

MonthsBetween

WeeksBetween

DaysBetween

HoursBetween

SecondsBetween

MinutesBetween

DateUtils中还有很多时间日期函数,大家自己看看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐