Delphi 有关日期时间的函数,以及StrToDateTime函数在不同系统出现错误的解决方案
2011-06-03 17:27
721 查看
Delphi提供了很多关于时间和日期的函数,非常方便。
引用
但是有时候一个疏忽导致你不知道错在哪里。
类似Java的Date().getTime()函数,它返回1970年1月1日8点(UTC+8)到当前时间之间的毫秒数。
在Delphi中用MinutesBetween函数就可以得到2个时间相差的毫秒数了。
首先必须将1970年1月1日8点转换为TDateTime类型,我就是在程序中这样写了一句
这句代码没有任何问题吧?你会发现在Windows7上出现错误,提示时间无效,但是这个时间确实没有错误,到底怎么回事?
其实大家看看Windows7的区域和语言设置便知道,看到日期了吗,是用"/"将年月日连接起来的,而在Xp系统是用"-"连接的。
这样就好解决这个错误了,直接把日期中的"-"改成"/",但这不是最好的办法,极不可取,程序员必须找到通用的办法,不管你系统格式设置的什么,都不影响我们的程序。
于是我找到了EncodeDateTime函数,直接用它转换成TDateTime类型
EncodeDateTime函数的参数是:EncodeDateTime(年, 月, 日, 时, 分, 秒, 毫秒)
如果程序非得用StrToDateTime函数,那只能自己处理字符串再用EncodeDateTime转换为TDateTime类型,目前我还没有找到更好的办法。
我的建议就是在保存时间的时候不要加连接符号,用FormatDateTime函数格式化日期和时间,请看下面。
它返回的日期还是用"-"连接的,这与系统设置有关,所以我们最好不用连接符,直接
这样读取就有固定的格式了,也好处理,就说这么多,发现错误再来补充。
时间差的函数是*Between这样的形式,比如
YearsBetween
MonthsBetween
WeeksBetween
DaysBetween
HoursBetween
SecondsBetween
MinutesBetween
DateUtils中还有很多时间日期函数,大家自己看看。
引用
uses DateUtils
但是有时候一个疏忽导致你不知道错在哪里。
类似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中还有很多时间日期函数,大家自己看看。
相关文章推荐
- delphi —StrToDateTime函数在不同系统出现错误的解决方案
- Delphi使用StrToDatetime在不同操作系统出现不同的情况(控制面板的时间格式都记录在注册表里,因此也可修改注册表)
- Delphi或者BCB在运行中出现“Stack Overflow- save your work and restart CodeGear”错误提示的解决方案
- 【转】QT获取系统时间,以及设置日期格式
- Windows Server 2008 R2 不支持直接输出日期时间,导致“函数返回 |”错误。
- VC++获取当前系统时间日期 GetSystemTime()函数的用法
- Oracle:ORA-01810:格式代码出现两次 日期格式、时间格式、to_date错误
- SQL 10 函数 3 日期时间函数 - 2 主流数据库系统中日期时间类型的表示方式
- 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案
- 关于VC出现 0x0C150002 错误的原因以及解决方案
- 使用第三方库出现找不到so库UnsatisfiedLinkError错误的原因以及解决方案
- DB2中有关日期和时间的函数,及应用
- win7 32系统 安装oracle 出现 未知错误 解决方案
- 附加SQLServer数据库时出现的错误(错误5173:不能使文件与不同的数据库相关)的解决方案
- 装系统时总是提示 保存分区表时出现错误(0000000001)函数不正确
- [delphi] 使用strtoDatetime在不同操作系统出现不同的情况
- DB2中有关日期和时间的函数,及应用
- 建立自由的会计日期的报表--1.1.认识几个有关时间的函数
- linux 下python3的安装与编译,以及scrapy出现sqlite3错误的解决方案
- delphi 一个修改系统时间的函数,超简单