How to convert a string into date

前端 未结 3 831
有刺的猬
有刺的猬 2021-01-25 01:46

I\'m trying to convert a string into date

a = Datumo: 16.09.2012.

d = Mid(a, 9, 2) \' 16 - should be the day
m = Mid(a, 12, 2) \' 09 - month
y = Mid(a, 15, 4)         


        
相关标签:
3条回答
  • 2021-01-25 02:27

    Thats not a correct use of DateValue, replace

    dt = DateValue(d, m, y) ' Error line 
    dt = DateAdd("d", 1, dt) ' should be 17.09.2012.
    

    with

    dt = DateSerial(y, m, d) 
    dt = DateAdd("d", 1, dt)
    

    or

    dt = 1 + DateAdd("d", 1, dt)
    
    0 讨论(0)
  • 2021-01-25 02:28

    VBA/Excel will often attempt to determine dates and get it wrong.

    Eg

    dt = DateSerial(2012, 14, 42) 'returns #14/03/2013#
    
    dtReal = IsDate("09 / 14 / 2012") 'returns TRUE when we really wanted to test dd/mm/yyyy - there's no 14th month.
    

    I often use the code below which is a longer but foolproof method of determining if a string date is real and return it as a date.

    Option Explicit
    
        Sub test()
        Dim testDate As Boolean
        Dim dt As Date
    
        testDate = IsTextDate("05/07/2012", dt, "dd/mm/yyyy") 'Could pass "mm/dd/yyyy" instead
        If testDate = True Then
            Debug.Print "Valid Date " & Format(dt, "dd-mmm-yyyy")
        Else
            Debug.Print "Invalid Date"
        End If
        End Sub
    
        Function IsTextDate(ByVal str As String, ByRef dt As Date, Optional dtFormat As String = "dd/mm/yyyy") As Boolean
        Dim D As Date
        Dim day As Integer
        Dim month As Integer
        Dim year As Long
        Dim daysinFeb As Integer
        Dim dtArray() As String
    
        'Test input string mask matches date format
        If Not (str Like "##/##/####") Then
            'Debug.Print "Invalid Date"
            Exit Function
        Else
            'split string on delimiter and extract correct 'dd' and 'mm' based on UK/US format
            dtArray = Split(str, "/")
            year = CInt(dtArray(2))
            If dtFormat = "dd/mm/yyyy" Then
                day = CInt(dtArray(0))
                month = CInt(dtArray(1))
            Else
                day = CInt(dtArray(1))
                month = CInt(dtArray(0))
            End If
    
            'determine days in Feb for year given.
            If IsDate("2/29/" & year) Then
                daysinFeb = 29
            Else
                daysinFeb = 28
            End If
    
            'determine if date is valid
            Select Case month
                Case 9, 4, 6, 11
                    '30 days
                    If day <= 30 Then IsTextDate = True
    
                Case 1, 3, 5, 7, 8, 10, 12
                    '31 days
                    If day <= 31 Then IsTextDate = True
    
                Case 2
                    'either 28 or 19 days
                    If day <= daysinFeb Then IsTextDate = True
    
            End Select
            If IsTextDate Then dt = DateSerial(year, month, day)
    
        End If
    
        End Function
    
    0 讨论(0)
  • 2021-01-25 02:43

    Look at the DatePart function ;)

    From exccel-help:

    Dim Datum1 As Date    ' Variablen deklarieren.
    Dim Msg
    Datum1 = InputBox("Geben Sie ein Datum ein:")
    Msg = "Quartal: " & DatePart("q", Datum1)
    MsgBox Msg
    

    Also there are specific function to retrieve parts of a valid date:

    Day()
    Month()
    Year()
    

    Example from excel-help:

    Dim Datum1, Tag1
    Datum1 = #12. Februar 1969#    ' Datum zuweisen.
    Tag1 = Day(Datum1)    ' Tag1 enthält 12.
    
    0 讨论(0)
提交回复
热议问题