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

时间:2008-10-03 10:16:50

标签: excel excel-vba vba

我会定期从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))

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

目前尚不清楚您是否谈论公式功能或VBA功能。

公式函数

不要使用需要字符串的DateValue函数;使用Date函数,它需要数字年,月,日:

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

假设date-as-string在A1中。

VBA功能

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

dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2)))

答案 1 :(得分:1)

如果你真的很关心的话,我相信你可以用Regex's做些什么。尽管如此,它可能不会更好“,可能更糟糕。

如果你原谅了一点C#(我多年没碰过VB,所以我不知道函数调用了)你也可以这样做:

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

但是,再一次,你并没有真正获得任何东西。你能举例说明你当前的代码会破坏吗?

答案 2 :(得分:1)

在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()函数最终将完成这项工作。

答案 3 :(得分:1)

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

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

但您的样本数据存在另一个问题:它的时间值为“00.00.00”和“24.00.00” 第二个插入TimeValue函数,因此您需要为特殊情况编写代码。