如何将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函数,因此我们将需要为特殊情况编写代码。