Проблема в том, что компьютер не может знать, в каком формате указана эта строковая дата
12-04-2019 01:03:32 PM AEST
Это может быть как из следующегоугадай и это не удастсяДаже человек не может сказать, какой из двух форматов является правильным. Поэтому даты, которые являются строками и не имеют реальных дат, довольно бесполезны (если только у вас нет дополнительной информации о формате, который не является частью самой строки даты).
Таким образом, только рабочее решение для преобразования строки в дату , если вы знаете , какой из обоих форматов является правильным, использовать эту информацию для разбиения даты на части и использовать функцию DateSerial чтобы создать из нее реальную дату.
Вам нужно будет сделать что-то вроде ниже для каждой ячейки в качестве преобразования строки в дату.
Пример
Public Sub ConvertTimeStampToRealDateTime()
Dim TimeStampString As String
TimeStampString = "12-04-2019 01:03:32 PM AEST"
'split by spaces
Dim SplitTimeStamp As Variant
SplitTimeStamp = Split(TimeStampString, " ")
'SplitTimeStamp(0) = "12-04-2019"
'SplitTimeStamp(1) = "01:03:32"
'SplitTimeStamp(2) = "PM"
'SplitTimeStamp(3) = "AEST"
'split date by dash
Dim SplitDate As Variant
SplitDate = Split(SplitTimeStamp(0), "-")
'SplitDate(0) = "12"
'SplitDate(1) = "04"
'SplitDate(2) = "2019"
'now we add the information which of the 3 split parts is day, month and year
'and put it together to a real date
Dim RealDate As Date
RealDate = DateSerial(SplitDate(2), SplitDate(1), SplitDate(0))
'cast time string into a date
Dim RealTime As Date
RealTime = SplitTimeStamp(1) & " " & SplitTimeStamp(2)
'casting from string to date works good for times but not for dates
'so we can do that with the time
'Add date and time to make it a datetime
Dim RealDateTime As Date
RealDateTime = RealDate + RealTime 'note that we need to ADD them mathematically (+) this is not a string concatenation (&)!!!
'AEST: This information about how many hours you need to add or subtract
' from this datetime to convert it into your desired time zone needs
' needs to be done manually
Dim RealDateTimeInMyZone As Date
RealDateTimeInMyZone = DateAdd("h", -3, RealDateTime) 'for example subtract 3 hours
End Sub
В конце вы можете записать свое реальное время в ячейку и отформатировать его в Range("A1").NumberFormat
в том формате, который вам нравится.
Изображение 1: переменнаязначения во время преобразования строки в дату.
Обратите внимание, что приведенный выше код является лишь примером концепции. Если вам нужно сделать это твердым, вам, вероятно, потребуются некоторые проверки и обработка ошибок, потому что это приведет к сбою в неожиданных входных строках.
Также, вероятно, хорошей идеей будет сделать из нее функцию, которую вы можете использовать повторно:
Public Function ConvertDDMMYYYYTimeStampToRealDateTime(ByVal TimeStampString As String) As Date
End Function