Лучший формат метки времени для CSV / Excel?



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

637   9  

9 ответов:

для второй точности, гггг-ММ-ДД чч: мм: СС должен сделать трюк.

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

предыдущее предложение использовать "yyyy-MM-dd HH:mm:ss" отлично, хотя я считаю, что Excel имеет гораздо более высокое разрешение по времени, чем это. Я нахожу этот пост довольно правдоподобно (следуйте потоку, и вы увидите много арифметики и экспериментов с Excel), и если это правильно, у вас будут свои миллисекунды. Вы можете просто прикрепить десятичные знаки в конце, т. е. " yyyy-mm-dd hh:mm:ss.000".

вы должны знать, что Excel может не обязательно форматировать данные (без человеческое вмешательство) таким образом, что вы увидите всю эту точность. На моем компьютере на работе, когда я настроил CSV с "yyyy-mm-dd hh:mm:ss.000 " данные (вручную с помощью блокнота), я получаю "мм:ss.0" в ячейке и "m/d/yyyy hh:mm:ss AM/PM" в строке формул.

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

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


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

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

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

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

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

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

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

как ответил user662894.

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

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

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

попробуйте формат MM/dd / yyyy hh:mm:ss a.

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

xmlResponse.добавить("mydate>").добавить(это.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;
}

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

Comments

    Ничего не найдено.