Пишу файл CSV. Мне нужно писать метки времени с точностью не менее секунды, а желательно до миллисекунды. Какой лучший формат для временных меток в файле CSV, чтобы они могли быть точно и однозначно проанализированы Excel с минимальным вмешательством пользователя?
110
Ответы:
Для второй точности yyyy-MM-dd HH: mm: ss подойдет.
Я считаю, что Excel не очень хорош с долями секунды (теряет их при взаимодействии с COM-объектом IIRC).
источник
strftime
, эквивалентная строка аргументов"%Y-%m-%d %H:%M:%S"
.CSV
это просто текстовый файл. Вы можете показать часовой пояс или что-нибудь еще, что вы записываете в файл, в виде обычного текста, разделенного запятыми; важно то, какое приложение будет его читать и как это приложение ожидает текст. Вот документация по стандарту CSV из Библиотеки Конгресса. Не существует предписанного способа хранения фиников. Также RFC-4180 и CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)."%Y-%m-%d %H:%M:%S"
таким же, как в Ruby.Предыдущее предложение использовать «yyyy-MM-dd HH: mm: ss» нормально, хотя я считаю, что Excel имеет гораздо более точное временное разрешение, чем это. Я считаю этот пост довольно достоверным (следите за темой, и вы увидите много арифметических операций и экспериментов с Excel), и если это правильно, у вас будут свои миллисекунды. Вы можете просто добавить десятичные знаки в конце, например «гггг-мм-дд чч: мм: сс.000».
Вы должны знать, что Excel не обязательно может форматировать данные (без вмешательства человека) таким образом, чтобы вы могли увидеть всю эту точность. На рабочем компьютере, когда я настраиваю CSV с данными «гггг-мм-дд чч: мм: сс.000» (вручную с помощью Блокнота), я получаю «мм: сс.0» в ячейке и «м / д / гггг чч: мм: сс AM / PM "в строке формул.
Для получения максимальной информации [1], передаваемой в ячейках без вмешательства человека, вы можете разделить метку времени на часть даты и часть времени, причем часть времени будет составлять только секунды. Мне кажется, что Excel хочет дать вам не более трех видимых «уровней» (где доли секунды - их собственный уровень) в любой ячейке, а вам нужно семь: годы, месяцы, дни, часы, минуты, секунды, и доли секунды.
Или, если вам не нужно, чтобы временная метка была удобочитаемой, но вы хотите, чтобы она была максимально точной, вы можете предпочесть просто хранить большое число (внутри Excel просто использует количество дней, включая дробные дни , начиная с даты "эпохи").
[1] То есть числовая информация. Если вы хотите видеть как можно больше информации, но не хотите проводить с ней вычисления, вы можете придумать какой-нибудь формат, который Excel определенно проанализирует как строку и, таким образом, оставит в покое; например, «ггггммдд.ччммсс.000».
источник
Формат «гггг-мм-дд чч: мм: сс.000» работает не во всех регионах. Для некоторых (по крайней мере, датских) "гггг-мм-дд чч: мм: сс, 000" подойдет лучше.
источник
Я считаю, что если бы вы использовали этот
double
тип данных, пересчет в Excel работал бы нормально.источник
Перейдите к настройкам языка на панели управления, затем к параметрам формата, выберите языковой стандарт и просмотрите фактический формат даты для выбранного языкового стандарта, используемого Windows по умолчанию. Да, этот формат метки времени зависит от локали. Excel использует эти форматы при анализе CSV.
Более того, если языковой стандарт использует символы помимо ASCII, вам придется передать CSV в соответствующей кодовой странице «ANSI» Windows до Unicode, например CP1251. Excel не принимает UTF-8.
источник
Что касается часовых поясов. Мне нужно сохранить смещение UTC в секундах от UTC, поэтому формулы в Excel / OpenOffice могут в конечном итоге локализовать дату и время. Я обнаружил, что это проще, чем хранить любое число, перед которым стоит 0. -0900 плохо разбирался ни в одной системе электронных таблиц, и при импорте было практически невозможно обучить людей этому.
источник
как ответил user662894.
Я хочу добавить: не пытайтесь получить микросекунды, скажем, из типа данных datetime2 SQL Server: Excel не может обрабатывать более 3 долевых секунд (то есть миллисекунд).
Таким образом, «гггг-мм-дд чч: мм: сс.000000» не будет работать, и когда Excel загружает такую строку (из файла CSV), он будет выполнять округление, а не усечение .
Это может быть хорошо, за исключением случаев, когда точность в микросекундах имеет значение, и в этом случае вам лучше НЕ запускать автоматическое распознавание типа данных, а просто сохранить строку как строку ...
источник
Думаю, формат ISO - хорошая идея. ( Статья в Википедии , также с информацией о времени)
источник
Попробуйте формат MM / dd / yyyy hh: mm: ss.
Код Java для создания файла XML.
источник
Итак, как ни странно, Excel импортирует дату в формате CSV разными способами. И отображает их по-разному в зависимости от формата, используемого в файле csv. К сожалению, формат ISO 8061 представляет собой строку. Это не позволяет вам самостоятельно переформатировать дату.
Все те, которые представлены в виде даты ... содержат всю информацию ... но они форматируются по-разному ... если вам это не нравится, вы можете выбрать новый формат для столбца в Excel, и он будет работать. (Примечание: вы можете сказать, что он был введен как допустимая дата / время, так как он будет выровнен по правому краю ... если он входит в виде строки, он будет выровнен по левому краю)
Вот форматы, которые я тестировал:
"гггг-ММ-дд", конечно, отображается как дата при открытии в Excel. (также работает "MM / dd / yyyy")
"гггг-мм-дд ЧЧ: мм: сс" по умолчанию формат отображения "ММ / дд / гггг ЧЧ: мм" (дата и время без секунд)
Формат отображения по умолчанию «гггг-мм-дд ЧЧ: мм: сс.fff» - «ЧЧ: мм: сс» (только время с / сек).
источник
Для файла csv со столбцом datetime в следующем формате: гггг-мм-дд чч: мм: сс
Excel показывает это в следующем формате: дд / мм / гггг чч: мм
например, 2020-05-22 16:40:55 отображается как 22/05/2020 16:40
Очевидно, это определяется выбранным в Windows форматом краткой даты и кратким временем; например, если я изменю формат краткой даты в Windows на гггг-мм-дд, Excel покажет 2020-05-22 16:40.
К сожалению, я не могу найти способ заставить Excel автоматически отображать секунды (мне приходится вручную форматировать столбец в Excel). Но если файл csv включает столбец времени в формате чч: мм: сс (например, 16:40:55), это то, что отображается в Excel, включая секунды.
источник