我们如何解决将 Access DB 从生产服务器转移到实时的日期时间问题
Posted
技术标签:
【中文标题】我们如何解决将 Access DB 从生产服务器转移到实时的日期时间问题【英文标题】:How we can resolve the datetime problem shifting the Access DB from production server to live 【发布时间】:2009-04-03 17:03:13 【问题描述】:您能否建议在 .Net 中纠正时区问题的最佳方法。最近我使用 asp.net C# 作为代码隐藏和 MS Access 作为后端开发了一个简单的网站。
我的生产服务器和实时服务器的日期时间设置不同。我的生产服务器日期格式是 dd-mm-yyyy
实时服务器格式为 mm-dd-yyyy。
当我尝试在前端投射日期时间时遇到错误。 “字符串未被识别为有效的日期时间。”
我尝试投射的日期已填充到我的生产服务器中,它在生产服务器中运行良好。但是当我将访问文件推送到实时服务器时,我遇到了上述错误。任何帮助将不胜感激
【问题讨论】:
【参考方案1】:作为一般规则,在不指定确切格式的情况下将 DateTime 转换为字符串/从字符串转换几乎每次都是一个坏主意。
【讨论】:
对此无法达成更多共识,+1【参考方案2】:将日期转换为 ISO 日期格式 - YYYY-MM-DD。当你把它放在那个格式时,有零歧义,而且 MS 的日期函数总是能理解它。
【讨论】:
@David W. Fenton:确实如此,ACE 也是如此。您可以自己测试它,例如SELECT FORMAT(CDATE('2009-04-06'), 'MMMM') 返回 'April'。【参考方案3】:这就是我在前端处理日期时间时总是做的事情:指定我自己的确切格式(通常是 DD/MMM/YYYY - 这样我就确定我的日期部分始终是数字、月份部分字符串和年份部分 4 位数字
也 - 使用 DateTime.ParseExact 而不是 DateTime.Parse。这样前端代码就没有歧义了。
还有 1 个提示 - 如果您使用的是 c# 3.5,我真的建议您在 datetime 类上创建一个扩展方法,在该类中您实际上对给定应用程序的特定格式进行硬编码,而不是提供 10 种不同的格式您要转换的地方,只需调用此扩展方法即可
这样,如果您以后出于任何原因想要更改格式,您只需更改 1 个扩展方法 :-)
【讨论】:
YYYY-MM-DD 也是明确的,并且具有 ISO 8601 和具有全数字元素的优点。【参考方案4】:对不起,我不做c#,但是在VB中,我做了以下(这是Access的常见问题)
myNewDate = cdate(format(DateIn,"mm/dd/yy"))
【讨论】:
【参考方案5】:您有几个选择,最合乎逻辑的方法是在从生产环境升级到实时环境时将该列中的值简单地转换为新格式。
但是,我宁愿强调最好的做法是让您的测试/开发/qa 环境尽可能接近生产环境,因此重新配置您的服务器以全部使用相同的格式将有助于避免该问题.
【讨论】:
【参考方案6】:在插入/更新查询中,无论区域设置如何,Access 都需要 mm/dd/yyyy 格式的日期。
【讨论】:
以上是关于我们如何解决将 Access DB 从生产服务器转移到实时的日期时间问题的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Oracle DB 查询外部 MS Access DB?
如何从 MySQL 数据库的内容中即时创建 Access DB 并在本地保存