我正在制作一个在我公司的每台计算机上运行的应用程序,并从Active Directory查询当前登录用户的信息。不幸的是我们也使用德语和英语操作系统,这就是我遇到以下问题的原因。 在英文操作系统上,查询日期格式为YYYY.MM.DD,但在德语中,格式为DD.MM.YYYY。所以我的问题是,我如何将德国日期转换为英语日期?这很重要,因为我会将这个日期插入到SQL数据库中,但在德国PC上我会收到以下错误:“将varchar数据类型转换为日期时间数据类型会导致超出范围的值。”我不知道这是否相关,但我在char *变量中有日期。
谢谢!
答案 0 :(得分:1)
如果你绝对确定你总是拥有上面的德语格式,那么我会看到一个C选项,为英语表示创建一个相同长度的char *并随机改变值:
MyEnglishD [0] = MyGermanD [ 6 ];
MyEnglishD [1] = MyGermanD [ 7 ];
MyEnglishD [2] = MyGermanD [ 8 ];
MyEnglishD [3] = MyGermanD [ 9 ];
MyEnglishD [4] = '.';
MyEnglishD [5] = MyGermanD [ 3 ];
MyEnglishD [6] = MyGermanD [ 4 ];
MyEnglishD [7] = '.';
MyEnglishD [8] = MyGermanD [ 0 ];
MyEnglishD [9] = MyGermanD [ 1 ];
我更喜欢的另一个选项是在SQL INSERT代码中使用日期格式字符串(Oracle的示例):
INSERT INTO MyTable (MyDateCol,...)
SELECT TO_DATE ( :MyDateVal, :MyDateFormat), :anotherVal... FROM DUAL;
对于英语日期,格式应为'YYYY.MM.DD',对于德语'DD.MM.YYYY'。
答案 1 :(得分:1)
我在SQL中找到了一种更简单的方法。
SELECT convert(datetime,'19 .08.2011 13:17:01',104) 这将导致以下结果:2011-08-19 13:17:01.000 我认为这是做我想要的最简单的方法。谢谢你的帮助!
答案 2 :(得分:0)
您必须将日期时间格式的varchar日期转换为写入它们。
您可以通过捕获错误来检测“德语”格式,然后在单独的变量中从“DD-MM-YYYY”中构建“YYYY-MM-DD”。
答案 3 :(得分:0)
如何在时间戳中存储数据?或者在api中查找setLocale并将其设置为例如EN-US