微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 基于任意格式将字符串转换为TDateTime

在Delphi 5中有没有办法将字符串转换为TDateTime,您可以在其中指定要使用的实际格式?

我正在处理一个工作处理程序,它接受各种工作站的任务。这些任务有一系列参数,其中一些是日期,但是(不幸的是,我的控制之外)它们作为字符串传递。由于作业可能来自不同的工作站,因此用于将日期格式化为字符串的实际日期时间格式可能(当然也是实际的)不同。

Googling,我发现唯一的快速解决方案是偷偷地更改ShortDateFormat变量,然后将其恢复到其原始值。因为ShortDateFormat是一个全局变量,而且我正在一个线程环境中工作,唯一的方法是通过同步每个对它的访问,这是完全不可接受的(和可撤销的)。

我可以将SysUtils单元的库代码复制到我自己的方法中,并调整它们使用指定的格式而不是全局变量,但我只是想知道是否有更多的东西,我错过了。

亲爱的,并且提前感谢,

威廉

UPDATE

更简洁地说:

我需要像StrToDate(或StrToDateTime)这样的东西,增加的选项是指定它应该用来将字符串转换为TDateTime的确切格式。

解决方法

我为FreePascal的dateutils单元创建了这样的例程,如果需要移植,它应该很容易地移植。

码:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/rtl-objpas/src/inc/dateutil.inc?revision=30628&view=co

(代码文件末尾的最后一个(巨大的)过程)

文档:

http://www.freepascal.org/docs-html/rtl/dateutils/scandatetime.html

请注意,它不是formatdatetime的完整的反向,它有一些扩展:

> FormatDateTime的倒数不是100%的倒数,只是因为可以把例如时间令牌在格式字符串中两次,而scandatetime不知道选择哪个时间。
>像hn这样的字符串不能安全地反转。例如。 1:2(1分钟后2分钟)提供12,被解析为12:00,然后
错过了“n”部分的字符。

>尾随字符被忽略。
>不支持东亚格式化字符,因为它们只是窗口。
>没有MBCS支持

>扩展

#9吃空白
>在空格结尾的模式是可选的。
>?匹配任何字符。
>引用上面的chars来真正匹配char。

(我相信这些意见稍微过时了,这个意义上,一些亚洲的支持后来被添加了,但我不确定)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐