Кращий формат часової позначки для CSV / Excel?


110

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


яку мову ви використовуєте для створення результату?
Пітер Пергач

Відповіді:


104

Для другої точності, yyyy-MM-dd HH: mm: ss повинен зробити свою справу.

Я вважаю, що Excel не дуже хороший з часткою секунди (втрачає їх при взаємодії з COM-об'єктом IIRC).


Так - я згоден з тобою та Фредріком. Якщо ви зможете викопати ці посилання, я, безумовно, буду вдячний. Дякую!

18
Для тих, хто використовує Ruby's strftime, еквівалентний рядок аргументу"%Y-%m-%d %H:%M:%S"
Грег Метью Крослі

2
@nickf - .CSVце просто текстовий файл. Ви можете показати часовий пояс або все інше, що ви записуєте у файл у вигляді простого тексту, розділеного комами; важливо, яка програма буде її читати , і як ця програма очікує текст. Ось документація на стандарт CSV з Бібліотеки Конгресу. Не існує встановленого способу конкретно зберігати дати. Також RFC-4180 та CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm).
ashleedawg

C # / IronPython File.GetLastWriteTimeUtc ("ваш шлях-сюди"). ToString ("yyyy-% m-% d% H:% MM:% ss")
Konrads

У python з strroll () формат також був би "%Y-%m-%d %H:%M:%S"- такий же, як у Ruby.
rcronk

18

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

Ви повинні знати, що Excel може не обов’язково форматувати дані (без втручання людини) таким чином, що ви побачите всю цю точність. На своєму комп’ютері на роботі, коли я налаштовував CSV з даними "yyyy-mm-dd hh: mm: ss.000" (вручну, використовуючи Notepad), я отримую "mm: ss.0" у комірці та "m / д / рр. гг: мм: сс AM / ПМ "у рядку формул.

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

Або, якщо вам не потрібна мітка часу, щоб її читали людиною, але ви хочете, щоб вона була максимально точною, ви можете скористатися просто зберіганням великої кількості (внутрішньо Excel використовує лише кількість днів, включаючи дробові дні , з дати "епохи").


[1] Тобто числова інформація. Якщо ви хочете побачити якомога більше інформації, але не байдуже робити обчислення з нею, ви можете скласти якийсь формат, який Excel обов'язково розбере як рядок, і таким чином залиште в спокої; наприклад, "yyyymmdd.hhmmss.000".


14

"yyyy-MM-dd hh: mm: ss.000" Формат працює не у всіх регіонах. Для деяких (принаймні датських) "yyyy-MM-dd hh: mm: ss, 000" буде працювати краще.


2
Як не дивно, Excel 2010 не визначає дати, коли частина мілісекунди становить 000. Буде робити будь-хто інший.
Dio F

4

Я вважаю, що якби ви використовували doubleтип даних, повторний обчислення в Excel буде добре працювати.


Я просто спробував, і це працює дуже добре. Просто потрібно сказати Excell, що формат конкретного стовпця - дата / час. Це не визначить це автоматично з CSV, оскільки це, очевидно, не описує дані
Peter Perháč

3

Перейдіть до мовних налаштувань на Панелі керування, а потім Опції форматування, виберіть локаль і перегляньте фактичний формат дати для вибраної мови, використовуваної Windows за замовчуванням. Так, формат часової позначки чутливий до локальної точки. Excel використовує ці формати під час аналізу CSV.

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


1

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


1

Формат "yyyy-mm-dd hh: mm: ss.000" працює не у всіх регіонах. Для деяких (принаймні датських) "yyyy-mm-dd hh: mm: ss, 000" буде працювати краще.

як відповів user662894.

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

Тож "yyyy-mm-dd hh: mm: ss.000000" не працюватиме, і коли Excel подається такого типу рядка (з файлу CSV), він буде виконувати округлення, а не усікання .

Це може бути добре, за винятком випадків, коли важлива мікросекундна точність, і в цьому випадку вам краще НЕ спрацьовувати автоматичне розпізнавання типу даних, а просто зберегти рядок як рядок ...


0

Я б здогадався, що ISO-формат - це гарна ідея. ( Стаття у Вікіпедії , також з інформацією про час)


1
(downvote; насправді ні, excel не визнає цього формату)
Doug

1
@Doug Я щойно провів тест, щоб перевірити його: працює чудово в Office 2010, англійській редакції, спробував обидва мої локальні налаштування (шведська мова, яка, як правило, використовує формат ISO для побачень, і англійська США). Нецікаво: в якому середовищі він провалився для вас? Я не в останню чергу здивований, що це працює для деяких, а для деяких не вдається: Excel насправді не є дивом послідовності в моєму досвіді ...
Fredrik Mörk

1
Це точно не працює в офісі 2012 для OSX. Єдиний "рідний" формат, який, як видається, визнав у моєму тестуванні, був MM / DD / YYYY HH: MM: SS; все інше просто трактували як текст.
Дуг

1
Я знайшов це запитання, виявивши, що Excel не розпізнає дати формату ISO у CSV. IMO, це помилка в Excel.
billpg

2
Це може бути, @Patrick. Це було трохи важко перевірити ще в 2009 році ;-)
Fredrik Mörk

0

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

Код Java для створення XML-файлу.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("дата"), "MM / dd / yyyy hh: mm: ss a")).

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

0

Отже, дивно перевершує імпорт csv дату різними способами. І відображає їх по-різному, залежно від формату, який використовується у файлі csv. На жаль, формат ISO 8061 входить як рядок. Що заважає вам самостійно переформатувати дату.

Всі ті, що вводяться як дата ... містять всю інформацію ... але вони форматуються по-різному ... якщо вам це не подобається, ви можете вибрати новий формат для стовпця в excel і він буде працювати. (Примітка. Ви можете сказати, що він увійшов як дійсна дата / час, оскільки він буде правильно виправдовуватись ... якщо він увійде як рядок, він залишить виправдання)

Ось тестовані нами формати:

"yyyy-MM-dd" відображається як дата курсу, коли відкривається в excel. (також працює "MM / dd / yyyy")

"yyyy-MM-dd HH: mm: ss" Формат відображення за замовчуванням "MM / dd / yyyy HH: mm" (дата і час без секунд)

"yyyy-MM-dd HH: mm: ss.fff" Типовим форматом відображення є "HH: mm: ss" (лише час з / сек)


-1

Дано файл csv із стовпцем дати у такому форматі: yyyy-mm-dd hh: mm: ss

Excel показує це у такому форматі: дд / мм / рр. Гг: мм

наприклад, 2020-05-22 16:40:55 показано як 22/05/2020 16:40

Це, очевидно, визначається форматом короткої дати та короткого часу, обраним у Windows; Наприклад, якщо я зміню формат короткої дати в Windows на yyyy-mm-dd, Excel показує 2020-05-22 16:40.

Прикро, я не можу знайти жодного способу змусити Excel автоматично показувати секунди (мені потрібно вручну відформатувати колонку в Excel). Але якщо файл csv містить стовпчик часу в форматі hh: mm: ss (наприклад, 16:40:55), це показує в Excel, включаючи секунди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.