繁体   English   中英

如何从时间戳获取日期

[英]How to get the Date from Time Stamp

我有一个Excel文件,它包含多个工作表的数据。 在那一列有时间戳,如21/6/12 10:33:07:AM。 我的系统日期格式为“m / d / yyyy”
将此转换为日期21/06/2012。 能够得到日期,但它显示错误。 06-12-2021这应该是21-06-2012。 我正在使用以下代码。

例如:26/6/12 11:15:07:AM应该是26/06/2012
21/6/12 10:33:07:AM应该是21/06/2012

Public Sub ConvtDate()
Dim ParseDateTime As Date
Application.ScreenUpdating = False
For Each datcol In ws_Raw2.Range("I2:I65536")  
x = InStr(1, datcol, " ", vbTextCompare) - 1  
If x > 0 Then  
    ParseDateTime = DateValue(Left(datcol, x))  
    datcol.Value = ParseDateTime
End If  
Next  
Application.ScreenUpdating = True  
End Sub  

请帮忙知道如何获取日期。
提前致谢。

DateValue期望将日期作为系统设置的格式的字符串。
从Excel帮助:

如果date是仅包含由有效日期分隔符分隔的数字的字符串,则DateValue会根据您为系统指定的短日期格式识别月,日和年的订单。

由于您的数据是在Day Month Year而您的系统是Month Day Year您需要重新构建传递给DateValue的参数。

这是你的男女同校的重构,还涉及其他一些问题:

  • Dim 所有变量调Dim (使用Option Explicit强制执行此操作)
  • 只处理您需要的行
  • 环的变体阵列而不是一个范围,它快得多

Public Sub ConvtDate()
    Dim ParseDateTime As Date
    Dim i As Long
    Dim x As Long
    Dim a() As String
    Dim dat As Variant
    Dim rng As Range

    Application.ScreenUpdating = False
    Set rng = Range(Cells(2, 9), Cells(Rows.Count, 9).End(xlUp))
    dat = rng.Value
    For i = 1 To UBound(dat, 1)
        x = InStr(1, dat(i, 1), " ", vbTextCompare) - 1
        If x > 0 Then
            a = Split(Left(dat(i, 1), x), "/")
            ParseDateTime = DateValue(a(1) & "/" & a(0) & "/" & a(2))
            ' or if you dont know the system data format use
            ' ParseDateTime = DateSerial(a(2), a(1), a(0))
            dat(i, 1) = ParseDateTime
        End If
    Next
    rng = dat
    Application.ScreenUpdating = True
End Sub

如果列格式化日期,Excel将自行更改为26/6/12至26/06/2012。 所以

ParseDateTime = Left(datcol, x)

应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM