Вы можете использовать встроенную функцию Format, чтобы сделать это за вас.
Вот простой тест, чтобы подтвердить это:
Public Sub TestDateParsing()
'On my computer, the date format is U.S. (mm/dd/yyyy)'
'This test creates a date string in dd/mm/yyyy format to'
'simulate user input in a different format'
Const TEST_DATE As Date = #6/1/2009#
Dim inputDate As String
inputDate = Format(TEST_DATE, "dd/mm/yyyy")
'inputDate is "1/6/2009" (June 1 in dd/mm/yyyy format)'
Debug.Print Format(inputDate, "dd/mm/yyyy")
'It`s magic! The above line will print 6/1/2009'
'which is the correct format for my Regional Settings'
End Sub
Это может показаться волшебством, но это не так. Он использует то, как функция Format работает в сочетании с текущими региональными настройками.
Например, предположим, что ваши региональные настройки настроены на использование формата "mm/dd/yyyy" для дат.
Теперь вы получаете строку даты от пользователя в формате "dd/mm/yyyy". Если вы Format эту строку даты и укажете Format также использовать "dd/mm/yyy", она поменяет местами части дня и месяца, поскольку в ваших настройках указано, что даты находятся в формате "mm/dd/yyyy".
Другими словами, Format всегда предполагает, что строка даты от пользователя отформатирована в соответствии с вашими текущими региональными настройками (в данном случае "mm/dd/yyyy"), поэтому, когда вы укажете ему форматировать дату с помощью "dd/mm/yyyy", он заставит его поменять местами месяц и дневные части. Если в ваших региональных настройках используется тот же формат, что и для даты, указанной пользователем, этот код все равно будет работать: Format просто вернет дату пользователя без изменений. Еще не запутались? ;)
То же самое произойдет, если ваши региональные настройки установлены на "dd/mm/yyyy", и пользователь отправит дату в формате "mm/dd/yyyy".
Загвоздка в том, что вы должны заранее знать, в каком формате пользователь отправляет даты. Они не могут начать смешивать и сопоставлять форматы даты (да и не должно быть).
РЕДАКТИРОВАТЬ (от MarkJ) - просто чтобы доказать, что код Майка может преобразовывать строку в Date. Майк, пожалуйста, откатитесь или измените это редактирование, если хотите.
Public Sub Test()
Dim dte As Date
For dte = #1/1/2009# To #12/31/2009#
Call TestDateParsing(dte)
Next dte
End Sub
Public Sub TestDateParsing(ByVal dteIn As Date)
'On my computer, the date format is U.S. (mm/dd/yyyy)'
'This test creates a date string in dd/mm/yyyy format to'
'simulate user input in a different format'
Dim sExpected As String
sExpected = Day(dteIn) & " / " & Month(dteIn) & " / " & Year(dteIn)
Dim inputDate As String
Dim dte As Date
inputDate = Format(dteIn, "dd/mm/yyyy")
dte = Format(inputDate, "dd/mm/yyyy")
Debug.Assert sExpected = Day(dte) & " / " & Month(dte) & " / " & Year(dte)
Debug.Print sExpected
End Sub
person
Mike Spross
schedule
29.06.2009