Я пишу CSV файл. Мне нужно написать временные метки, которые точны, по крайней мере, до второго, а предпочтительно до миллисекунды. Какой лучший формат для временных меток в CSV файле, чтобы их можно было точно и однозначно анализировать с помощью Excel с минимальным вмешательством пользователя?
Лучший формат временной отметки для CSV/Excel?
Ответ 1
Для второй точности yyyy-MM-dd HH: mm: ss должен сделать трюк.
Я считаю, что Excel не очень хорош с долями секунды (теряет их при взаимодействии с COM-объектом IIRC - я постараюсь найти ссылку и разместить ее здесь).
Ответ 2
Раннее предложение использовать "yyyy-MM-dd HH: mm: ss" прекрасно, хотя, я считаю, Excel имеет гораздо более точное временное разрешение, чем это. Я нахожу этот пост довольно правдоподобным (следуйте за нитью, и вы увидите много арифметики и экспериментируете с Excel), и если это будет правильно, Будут миллисекунды. Вы можете просто напасть на десятичные знаки в конце, то есть "yyyy-mm-dd hh: mm: ss.000".
Вы должны знать, что Excel может не обязательно форматировать данные (без вмешательства человека) таким образом, чтобы вы увидели всю эту точность. На моем компьютере на работе, когда я настраивал CSV с данными "yyyy-mm-dd hh: mm: ss.000" (вручную используя "Блокнот" ), я получаю "mm: ss.0" в ячейке и "m/d/yyyy hh: mm: ss AM/PM" в строке формулы.
Для получения максимальной информации [1], переданной в ячейках без вмешательства человека, вы можете разделить свою временную метку на часть даты и временную часть с временной частью только второй. Мне кажется, что Excel хочет дать вам не более трех видимых "уровней" (где доли секунды - их собственный уровень) в любой данной ячейке, и вы хотите семь: годы, месяцы, дни, часы, минуты, секунды, и доли секунды.
Или, если вам не нужна метка времени для чтения человеком, но вы хотите, чтобы она была как можно более точной, вы можете предпочесть просто сохранить большое число (внутри, Excel использует только количество дней, включая дробные дни, начиная с даты "эпохи" ).
[1] То есть, числовая информация. Если вы хотите видеть как можно больше информации, но не заботитесь о выполнении расчетов с ней, вы можете составить какой-то формат, который Excel определенно будет анализировать как строку и, таким образом, оставить в покое; например "Yyyymmdd.hhmmss.000".
Ответ 3
"yyyy-MM-dd hh: mm: ss.000" формат не работает во всех локалях. Для некоторых (по крайней мере датских) "yyyy-MM-dd hh: mm: ss, 000" будет работать лучше.
Ответ 4
Я полагаю, что если вы использовали тип данных double
, перерасчет в Excel будет работать нормально.
Ответ 5
Что касается часовых поясов. Я должен хранить смещение UTC в секундах от UTC, так что формулы в Excel/OpenOffice могут в конечном итоге локализовать datetimes. Я нашел, что это проще, чем хранить любое число с 0 перед ним. -0900 не разбирался хорошо в любой системе электронных таблиц, и импортировать было почти невозможно обучить людей делать.
Ответ 6
Перейдите к настройкам языка на панели управления, затем нажмите "Параметры форматирования", выберите язык и выберите фактический формат даты для выбранной локали, используемой Windows по умолчанию. Да, этот формат временной метки чувствителен к региону. Excel использует эти форматы при анализе CSV.
Кроме того, если языковой стандарт использует символы, отличные от ASCII, вам придется испускать CSV в соответствующей кодовой странице кода ANSI предварительной кодировки Unicode, например. CP1251. Excel не будет принимать UTF-8.
Ответ 7
"yyyy-mm-dd hh: mm: ss.000" формат не работает во всех локалях. Для некоторые (по крайней мере датские) "yyyy-mm-dd hh: mm: ss, 000" будут работать лучше.
как ответил пользователь662894.
Я хочу добавить: не пытайтесь получить микросекунды, например, с помощью datetimeype SQL Server datetime2: Excel не может обрабатывать более 3 дробных секунд (т.е. миллисекунды).
Значит, "yyyy-mm-dd hh: mm: ss.000000" не будет работать, и когда Excel будет кормить этот тип строки (из файла CSV), он будет выполнять округление, а не усечение.
Это может быть хорошо, за исключением случаев, когда важна микросекундная точность, и в этом случае вам лучше не запускать автоматическое распознавание типа данных, а просто сохранить строку как строку...
Ответ 8
Я бы предположил, что ISO-формат - хорошая идея. (Статья в Википедии, также с информацией о времени)
Ответ 9
Попробуйте MM/dd/yyyy hh: mm: ss format.
Java-код для создания XML файла.
xmlResponse.append( "MyDate > " ). Добавить (this.formatDate(resultSet.getTimestamp( "Дата" ), "MM/dd/yyyy hh: mm: ss a" )). Append ("");
public String formatDate(Date date, String format)
{
String dateString = "";
if(null != date)
{
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateString = dateFormat.format(date);
}
return dateString;
}