Вопрос

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

Это было полезно?

Решение

Для второй точности подойдет формат гггг-ММ-дд ЧЧ:мм:сс.

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

Другие советы

Предыдущее предложение использовать «гггг-ММ-дд ЧЧ:мм:сс» вполне подходит, хотя я считаю, что 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 плохо анализировался ни в одной системе электронных таблиц, и импортировать его было практически невозможно научить людей делать это.

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

как ответил пользователь 662894.

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

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

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

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

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

xmlresponse.append ("mydate>"). Append (this.formatdate (resultset.getTimeStamp ("date"), "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;
}

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

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

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

«ГГГГ-ММ-ДД» отображается как дата, конечно, при открытии в Excel.(также работает «ММ/дд/гггг»)

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top