2009-04-29 5 views
80

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

+0

какой язык вы используете для создания выходного сигнала ? –

ответ

70

Для второй точности, yyyy-MM-dd HH: mm: ss должен сделать трюк.

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

+0

Да, я согласен с вами и Фредриком. Если бы вы могли выкопать эти ссылки, я, конечно, был бы благодарен. Благодаря! – 2009-04-29 21:03:45

+11

Любая идея, как вы можете показать часовой пояс? – nickf

+8

Для всех, кто использует Ruby's ['strftime'] (http://apidock.com/ruby/DateTime/strftime), эквивалентная строка аргумента' '% Y-% m-% d% H:% M:% S" ' –

2

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

+0

Я просто пробовал, и он работает действительно красиво. Просто скажите Excell, что формат этого столбца - дата/время. Он не обнаружит это автоматически из CSV, поскольку он, очевидно, не описывает данные –

0

Я бы предположил, что ISO-format - хорошая идея. (Wikipedia article, также со временем)

+0

Согласен; это, кажется, лучший выбор. – 2009-04-29 21:03:16

+1

(downvote; на самом деле, нет, excel не распознает этот формат) – Doug

+1

@Doug Я только что проверил тест, чтобы проверить его: отлично работает в Office 2010, английское издание, пытался с моими локальными настройками (шведский, который используется формат ISO для дат и американский английский). Из интереса: в какой среде это не сработало для вас? Я нисколько не удивлен, что он работает для некоторых и не подходит для некоторых: Excel на самом деле не удивительно согласованности в моем опыте ... –

11

Предыдущее предложение использовать «yyyy-MM-dd HH: mm: ss» отлично, хотя я считаю, что Excel имеет гораздо более точное временное разрешение, чем это. Я считаю, что this post весьма правдоподобно (следуйте за темой, и вы увидите много арифметики и экспериментируете с 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".

9

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

+0

Странно Excel 2010 не определяет даты, когда миллисекундная часть 000. Любой другой будет делать. –

1

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

1

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

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

0

Попробуйте MM/dd/yyyy hh: mm: ss format.

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

xmlResponse.append ("MyDate>") добавить (this.formatDate (resultSet.getTimestamp ("Дата"), "ММ/дд/гггг чч: мм: сс а")). добавление ("");

public String formatDate(Date date, String format) 
{ 
    String dateString = ""; 
    if(null != date) 
    { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(format); 
     dateString = dateFormat.format(date); 
    } 
    return dateString; 
} 
1

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

как пользователь user662894.

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

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

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

Смежные вопросы