У меня есть текстовый файл, содержащий много записей в следующем формате:

ГГГГ / ММ / ДД ЧЧ: ММ: СС.ССС AM\PM Как бы вы преобразовали это в следующий формат?

ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС (24-часовой формат) Этот файл содержит много записей даты, поэтому он должен изменить формат даты всех записей ...

Спасибо

2 ответа2

0

https://dotnetfiddle.net/ksvLh3

Приведенный выше скрипт обрабатывает строку DATETIME_INPUT и обрабатывает ее в окне вывода с изменением, которое вы запросили.

Чтобы использовать скрипт:

  1. откройте ссылку выше.
  2. вставьте исходные данные даты и времени поверх существующих данных в константе DATETIME_INPUT.
  3. страница должна автоматически генерировать вывод в нижнем окне. если нет, нажмите кнопку «Выполнить»
  4. скопируйте / вставьте результаты из нижнего окна в файл назначения.

Примечание: я не уверен, как этот скрипт будет работать с большими входными наборами. При необходимости укажите дополнительные требования (размер ввода, как часто вам нужно будет запускать этот процесс, нужно ли его автоматизировать или один раз и т.д.)

0

При условии, что время даты в исходном файле находится в фиксированной позиции, как в этом примере в начале:

> type datetime.txt
2016/12/12 05:16:41.898 PM Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed d
2017/01/16 11:05:05.897 AM a aliquyam erat, sed diam voluptua. At vero eos et accusam et 
2017/01/25 02:07:07.457 PM no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem 
2017/05/17 05:49:08.140 PM m nonumy eirmod tempor invidunt ut labore et dolore magna aliq
2017/06/10 04:40:56.529 AM sto duo dolores et ea rebum. Stet clita kasd gubergren, no sea

Пакетный файл может анализировать элементы для переменных и проверять AM/PM, а в случае PM добавить 12 к часу и сложить с измененными разделителями (удаляя AM/PM).

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
For /F "usebackq Tokens=1-8* Delims=/:. " %%A in (
  "datetime.txt"
) do If /i "%%H" equ "AM" (
  Echo %%A-%%B-%%C %%D:%%E:%%F.%%G %%I
) Else If /i "%%H" equ "PM" (
  Set /A Hr=1%%D + 12
  Echo %%A-%%B-%%C !Hr:~-2!:%%E:%%F.%%G %%I
)  Else Echo no AM/PM found

Образец вывода:

> SU_1229322.cmd
2016-12-12 17:16:41.898 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed d
2017-01-16 11:05:05.897 a aliquyam erat, sed diam voluptua. At vero eos et accusam et
2017-01-25 14:07:07.457 no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem
2017-05-17 17:49:08.140 m nonumy eirmod tempor invidunt ut labore et dolore magna aliq
2017-06-10 04:40:56.529 sto duo dolores et ea rebum. Stet clita kasd gubergren, no sea

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .