如何将 DB2 日期时间字符串转换为 Excel 日期

How to convert a DB2 date-time string into an Excel Date

提问人:Oli 提问时间:10/3/2008 最后编辑:CommunityOli 更新时间:6/12/2014 访问量:13713

问:

我会定期从 DB/2 数据库中获取摘录,其日期和时间点的格式如下:

2002-01-15-00.00.00.000000
2008-01-05-12.36.05.190000
9999-12-31-24.00.00.000000

有没有比用子字符串分解更简单的方法将其转换为 Excel 日期格式?

DB2date = DateValue(Left(a, 4) + "/" + Mid(a, 6, 2) + "/" + Mid(a, 9, 2))

感谢您的帮助!

Excel VBA

评论

0赞 Oli 10/3/2008
我正在并行使用法语、德语和英语版本的 Excel,如果我在公式中使用它,我预计会遇到一些格式刺痛的问题

答:

1赞 Matthew Scharley 10/3/2008 #1

我敢肯定,如果你真的愿意,你可以用正则表达式做一些事情。不过,它不会“更好”,可能会更糟。

如果你能原谅一点 C#(我已经好几年没有接触过 VB,所以我不知道函数调用了),你也可以这样做:

DB2string = "2002-01-15-00.00.00.000000";
DB2date = DateValue(DB2string.SubString(0, 10).Replace('-', '/'));

但同样,你并没有真正获得任何东西。您能举例说明您当前的代码会在哪些地方中断吗?

2赞 tzot 10/3/2008 #2

目前尚不清楚您谈论的是公式函数还是 VBA 函数。

公式函数

不要使用 DateValue 函数,该函数需要字符串;使用 Date 函数,该函数需要数字 Year, Month, Day:

=DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2)))

假设字符串中的日期在 A1 中。

VBA 函数

与上面类似的计算,只需改用 DateSerial 函数即可:

dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2)))
1赞 Philippe Grondier 10/3/2008 #3

在VBA中,可以将字符串的第一部分转换为日期:dateValue()

? dateValue("2002-01-15")

    15/01/2002

因此,为您获取它的正确方法是

? dateValue(left("2002-01-15-00.00.00.000000",10))

只要 DB2 始终给你一个 “YYYY-MM-DD” 日期,这将始终给你正确的答案。结果的格式(dd/mm/yy、mm-ddd-yyyy 等)将取决于计算机的本地设置/单元格的特定设置。

如果你想提取字符串的“时间”部分,这个函数最终会完成这项工作。timeValue()

1赞 blairxy 10/3/2008 #4

如果您想包含时间信息,您还有更多工作要做;DateValue 丢弃它。
TimeValue 可以将时间部分评估到秒,因此您可以添加它们:

= DateValue(Mid(a, 1, 10)) + TimeValue(Mid(a, 12, 8))

但是您的示例数据存在另一个问题:它同时具有时间值“00.00.00”和“24.00.00”。
第二个堵塞了 TimeValue 函数,因此您需要针对特殊情况进行编码。