Лучший формат меток времени для CSV / Excel? - PullRequest
94 голосов
/ 30 апреля 2009

Я пишу файл CSV. Мне нужно написать метки времени, которые точны, по крайней мере, с точностью до секунды, а предпочтительно с точностью до миллисекунды. Какой формат меток времени в CSV-файле является лучшим, чтобы Excel мог точно и однозначно проанализировать его с минимальным вмешательством пользователя?

Ответы [ 10 ]

85 голосов
/ 30 апреля 2009

Для второй точности, гггг-ММ-дд ЧЧ: мм: сс должны помочь.

Я считаю, что Excel не очень хорош с долями секунды (теряет их при взаимодействии с COM-объектом IIRC).

16 голосов
/ 01 мая 2009

Более раннее предложение использовать «гггг-мм-дд ЧЧ: мм: сс» хорошо, хотя я полагаю, что в Excel разрешение по времени гораздо более точное, чем у этого. Я нахожу этот пост весьма правдоподобным (следите за веткой, и вы увидите много арифметики и экспериментов с Excel), и если она верна, у вас будут миллисекунды. Вы можете просто добавить десятичные знаки в конце, то есть "гггг-мм-дд чч: мм: сс.000".

Вы должны знать, что Excel не обязательно форматирует данные (без участия человека) таким образом, что вы увидите всю эту точность. На моем компьютере на работе, когда я настраиваю CSV с данными «гггг-мм-дд чч: мм: сс.000» (вручную, используя Блокнот), я получаю «мм: сс.0» в ячейке и «м / д / гггг чч: мм: сс AM / PM "в строке формул.

Для получения максимальной информации [1], передаваемой в ячейках без участия человека, вы можете разделить свою временную метку на часть даты и часть времени, причем часть времени - только секунда. Мне кажется, что Excel хочет дать вам не более трех видимых «уровней» (где доли секунды - это их собственные уровни) в любой ячейке, а вам нужно семь: годы, месяцы, дни, часы, минуты, секунды, и доли секунды.

Или, если вам не нужна временная метка, чтобы она была удобочитаемой, но вы хотите, чтобы она была как можно более точной, вы можете предпочесть просто хранить большое число (внутренне Excel просто использует количество дней, включая дробные дни, начиная с даты «эпохи»).


[1] То есть числовая информация. Если вы хотите видеть как можно больше информации, но не хотите выполнять с ней вычисления, вы можете создать какой-то формат, который Excel определенно будет анализировать как строку, и, следовательно, оставить его в покое; например "Yyyymmdd.hhmmss.000".

13 голосов
/ 16 марта 2011

Формат "гггг-мм-дд чч: мм: сс.000" работает не во всех локалях. Для некоторых (хотя бы датских) лучше подойдет «гггг-мм-дд чч: мм: сс, 000».

4 голосов
/ 30 апреля 2009

Полагаю, что если вы используете тип данных double, пересчет в Excel будет работать нормально.

3 голосов
/ 21 апреля 2014

Перейдите к настройкам языка на панели управления, затем «Параметры формата», выберите локаль и просмотрите фактический формат даты для выбранной локали, используемой Windows по умолчанию. Да, этот формат отметки времени зависит от языка. Excel использует эти форматы при разборе CSV.

Более того, если в языковом стандарте используются символы, не входящие в ASCII, вам придется излучать CSV в соответствующей кодовой странице Windows ANSI, предшествующей Unicode, например, CP1251. Excel не принимает UTF-8.

1 голос
/ 13 декабря 2016

Формат "гггг-мм-дд чч: мм: сс.000" работает не во всех локалях. За некоторые (по крайней мере, датские) "гггг-мм-дд чч: мм: сс, 000" будут работать лучше.

в ответ на user662894.

Я хочу добавить: не пытайтесь получить микросекунды, скажем, от типа datetime2 SQL Server: Excel не может обрабатывать более 3 дробных секунд (т.е. миллисекунд).

Таким образом, «гггг-мм-дд чч: мм: сс.000000» не будет работать, и когда в Excel подается этот тип строки (из файла CSV), он будет выполнять округление чем усечение .

Это может быть хорошо, за исключением случаев, когда имеет значение микросекундная точность, и в этом случае вам лучше НЕ запускать автоматическое распознавание типов данных, а просто сохранять строку как строку ...

1 голос
/ 15 марта 2012

Что касается часовых поясов. Я должен хранить смещение UTC в секундах от UTC, чтобы формулы в Excel / OpenOffice могли в конечном итоге локализовать datetime. Я обнаружил, что это проще, чем хранить любое число с нулем перед ним. -0900 плохо разбирается ни в одной системе электронных таблиц, и при импорте почти невозможно обучить людей.

0 голосов
/ 08 ноября 2018

Итак, странным образом Excel импортирует дату в формате csv по-разному. и , отображает их по-разному в зависимости от формата, используемого в CSV-файле. К сожалению, формат ISO 8061 представлен в виде строки. Что мешает вам переформатировать дату самостоятельно.

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

Вот форматы, которые я тестировал:

"yyyy-MM-dd" отображается как дата курса, когда открывается в Excel. (также работает "MM / dd / yyyy")

"гггг-мм-дд чч: мм: сс" Формат отображения по умолчанию: "мм / дд / гггг чч: мм" (дата и время без секунд)

«гггг-ММ-дд ЧЧ: мм: сс.ффф» Формат отображения по умолчанию: «ЧЧ: мм: сс» (время только в секундах)

0 голосов
/ 08 октября 2014

Попробуйте MM / дд / гггг чч: мм: сс формат.

Java-код для создания XML-файла.

xmlResponse.append ( "MyDate>"). Присоединять (this.formatDate (resultSet.getTimestamp ( "Дата"), "MM / дд / гггг чч: мм: сс")). Append ("");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}
0 голосов
/ 30 апреля 2009

Я думаю, ISO-формат - хорошая идея. ( статья в Википедии , также с информацией о времени)

...