我会定期从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))
感谢您的帮助!
答案 0 :(得分:2)
目前尚不清楚您是否谈论公式功能或VBA功能。
不要使用需要字符串的DateValue函数;使用Date函数,它需要数字年,月,日:
=DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2)))
假设date-as-string在A1中。
与上面类似的计算,只需使用 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函数,因此您需要为特殊情况编写代码。