2011-09-19 241 views
-1

我正在制作一个应用程序,该应用程序在我公司的每台计算机上运行,​​并从Active Directory中的当前登录用户查询信息。不幸的是,我们也使用德语和英语操作系统,这就是我遇到以下问题的原因。 在英文操作系统上查询日期格式为YYYY.MM.DD,但在德语操作系统上格式为DD.MM.YYYY。所以我的问题是,我如何将德国日期转换为英文日期格式?这很重要,因为我会将此日期插入到SQL数据库中,但在德语PC上,我收到以下错误:“将varchar数据类型转换为日期时间数据类型导致超出范围值。”我不知道这是否相关,但我有一个char *变量的日期。如何将日期从德文格式转换为英文格式?

谢谢!

+1

最明显的方法是将英文日期字符串的新字符串和strcpy部分制作成德语日期字符串,从/从不同的偏移量开始。由于这些字段的长度是固定的,因此它只是3 strcpy()s :) – Radu

+1

您使用的是什么API?它是否提供了从数据库中提取日期的独立于语言环境的方法?您不应该将日期格式化为字符串,然后解析它,因为效率低下且容易出现此类错误。 – trojanfoe

+0

好的,但我必须检查收到的日期是英文还是德文格式。我怎么样? – kampi

回答

1

我在SQL中发现了一个更简单的方法。

选择转换(日期时间,'19 .08.2011 13时17分01' 秒,104) 这将导致以下内容:2011-08-19 13:17:01.000 我觉得这是做什么最简单的方法我想要。谢谢你们的帮助!

1

如果你有绝对的把握,你总是有上述德国的格式,然后我通过创建英语表示相同长度的字符*和周围洗牌的价值观看到一个C选项:

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'。

0

您必须将日期时间格式的varchar日期转换为写入它们。

您可以通过捕获错误来检测“德语”格式,然后在单独的变量中从“DD-MM-YYYY”中构建“YYYY-MM-DD”。

0

如何在时间戳中存储数据?或者在api中查找setLocale并将其设置为en-us

+0

关于将其存储在某种时间戳/日期/时间列中的问题_is_。但是输入是某种字符串。有人必须进行转换。它似乎不是DB :-) –

相关问题