Как я могу получить метку времени в формате «гггг / мм / дд чч: мм: сс.ффф» в VBA?

0

Я хочу получить этот вывод:

2018-09-02 00:00:00.000

Я попробовал следующий код:

.Cells(LRS + 1, 15).Value = Format(.Cells(LRS + 1, "A").Value, "yyyy-MM-dd hh:mm:ss.fff")

И я получил:

2018-09-02 00:00:00.fff

Начальная дата в Excel имеет следующий формат yyyy/mm/dd, без yyyy/mm/dd времени. Поэтому часть времени включает в себя только нули 00:00:00.000. Причина, по которой я хочу включить время в конкретный формат, заключается в том, что я планирую импортировать эти даты в таблицу SQL с этим форматом.

Есть ли решение?

  • 1
    Как вы можете видеть из документации: docs.microsoft.com/en-us/office/vba/language/reference/... fff не распознаются как форматирование маркеров. Содержит ли исходная информация, которую вы обрабатываете, эту информацию? Я упоминаю об этом, потому что datetime время по умолчанию в более старых версиях MySQL не включают миллисекунды или микросекунды - вам придется использовать datetime (3) или datetime (6).
  • 0
    Начальная дата имеет следующий формат «гггг / мм / дд», без учета времени, поэтому временная часть включает только нули 00: 00: 00.000. Причина, по которой я хочу включить время в определенном формате, заключается в том, что при планировании импорта этих дат в таблицу SQL с этим форматом.
Показать ещё 1 комментарий
Теги:
excel-vba
excel
datetime
timestamp
date-formatting

2 ответа

1

Как видно из документации fff не распознается как токен форматирования в VBA.

Полезно, что вы можете импортировать данные в SQL без форматирования, чтобы добавить время. Если вы импортируете его в поле datetime времени, механизм SQL по умолчанию автоматически установит для части времени поля значение полуночи даты, которую вы указали.

Я думаю, что вы можете просто изменить строку формата на yyyy-MM-dd.

Однако, если вы действительно хотите сделать это так, то, поскольку время не указано, просто используйте жесткий код 000 вместо fff. Остальное время может быть аналогичным образом жестко закодировано, поскольку оно никогда не меняется, поэтому вы получите yyyy-MM-dd 00:00:00.000. Но, как я уже сказал, я думаю, что это немного бессмысленно.

  • 0
    я буду использовать эту простую строку формата yyyy-MM-dd и жесткий код время, потому что больше ничего не работает.
  • 0
    Чтобы было ясно, вам вообще ничего не нужно делать со временем. Вы можете оставить это Я был бы очень удивлен, если бы это не сработало - mySQL должен принять простую дату в импорте в поле datetime.
0

После замены формата ячейки соответствующим форматом, скорее всего, значение ячейки будет импортировано как текст, а не как значение.

Sub test()
    Dim s As String, s1 As String, s2 As String
    'First Cell format as your "yyyy-mm-dd hh:mm:ss.000"
    Range("a2").NumberFormatLocal = "yyyy-mm-dd hh:mm:ss.000"

    'In vb,This format("yyyy-mm-dd hh:mm:ss.000") is not recognized. 
    Range("b2") = Format(Range("a2"), "yyyy-mm-dd hh:mm:ss.000")
    s1 = Format(Range("a2"), "yyyy-mm-dd hh:mm:ss.000")
    's1 = "2018-09-03 01:24:33.000"

    'Since you format a2 cell as "yyyy-mm-dd hh:mm:ss.000" you can get data as text
    Range("b2") = Range("a2").Text
    s2 = Range("a2").Text
    's2= "2018-09-03 01:24:33.240"
End Sub

Данные листа

Изображение 174551

Локальное окно

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню