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

时间:2020-03-06 15:04:02  来源:igfitidea点击:

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

感谢帮助!

解决方案

我敢肯定,如果我们真的很在意,可以使用Regex来煮些东西。不过,这不会是"更好"的选择,可能会更糟。

如果我们能原谅一点C(多年以来我都没有接触过VB,所以我不知道该函数调用了),我们也可以这样做:

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

但同样,我们并没有真正获得任何收益。我们能否举一个例子说明我们当前的代码将在何处中断?

目前尚不清楚我们是在谈论公式函数还是VBA函数。

公式函数

不要使用DateValue函数,该函数需要一个字符串。使用日期函数,该函数期望数字为年,月,日:

=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)))

在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()函数将最终完成任务。

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

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

但是样本数据存在另一个问题:它的时间值分别为" 00.00.00"和" 24.00.00"。
第二个函数阻塞了TimeValue函数,因此我们将需要为特殊情况编写代码。