Почему Excel обрабатывает некоторые даты иначе, чем другие?

1

У меня есть файл CSV, который содержит строки, которые должны интерпретироваться как даты с минутами, секундами и миллисекундами.

В частности записи выглядят так:

"07/31/2013 23:59:32.864",otherdata,moredata
"08/01/2013 00:00:02.863",otherdata,moredata

Для 31.07.2013 Excel решила использовать «Общий» формат и отображает значение как

07/31/2013 23:59:32.864

Это как и ожидалось.

Тем не менее, на 01.08.2013, Excel выбирает «Пользовательский» формат «mm: ss.0» и отображает значение

00:02.9

Это не помогает Если я изменю формат ячейки на «Общий», значение становится 41282.00003.

Как ни странно, если я поменяю август на июль (например, 01.07.2013), отображаемое значение теперь

07/01/2013  00:00:03

с "Custom" форматом "дд / мм / гггг чч: мм".

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

Обратите внимание, что это не имеет ничего общего с запутанными днями Excel в течение нескольких месяцев. Дата 13.08.2013 (где 8 - ясно, месяц) теряет свои миллисекунды и отображается как

08/13/2013  23:01:06

с "Custom" форматом "мм: сс.0".

Это совершенно странно.

Andrew J. Brehm
источник

Ответы:

5

Вам необходимо уточнить ваши региональные настройки и форматы дат и привести их в соответствие с порядком дат и месяцев в формате CSV. Они, кажется, не склеиваются в данный момент.

41282.00003 8 января 2013 года, а не 1 августа 2013 года.

Excel попытается интерпретировать дату в соответствии с региональными настройками вашего компьютера. Если региональные настройки - DMY, а дата интерпретации - 31.07.2013, порядок DMY не будет работать, и Excel будет интерпретировать данные как текст. Это то, что вы видите. Текст, который выглядит как значение даты / времени. Попробуйте отформатировать это видимое значение даты / времени по-другому. Вы увидите, что не можете, потому что это текст.

Но если следующий ряд данных имеет 08/01/2013, это очень хорошо вписывается в схему DMY региональных настроек и будет возвращено 8 января 2013 года. Вы можете изменить формат ячейки на пользовательский формат

dd/mm/yyyy hh:mm:ss.000

и это покажет как 08/01/2013 00:00:02.863

enter image description here

Значение в ячейке A1 - это текстовое значение, а не реальное время даты. Формат ячейки «Общий», и никакое количество форматирования чисел не изменит его внешний вид.

Значение в ячейке A2 представляет собой реальное значение даты / времени, отформатированное в указанном выше пользовательском формате.

При импорте дат будьте особенно внимательны, чтобы проверить порядок дня и месяца в импортированных данных. Когда вы используете мастер импорта, вы можете указать, в каком порядке находятся исходные данные, и все даты будут импортироваться последовательно.

Давайте внимательнее посмотрим на вторую (реальную) дату. 08/01/2013 00:00:02.863 в формате «Общие» отображается как 41282.00003 и отформатированный с правильной датой показывает как 8 января 2013. Хорошо.

Если вы увеличите десятичные дроби для общего формата, вы обнаружите, что фактическое базовое число 41282.0000331366, Этот номер имеет 15 цифр.

Отформатированный как дата, вы можете отредактировать его и изменить день с 8 на 7. Результат будет отображаться в «общем» формате как 41281.00003, но если вы увеличите количество отображаемых цифр, вы увидите, что номер 41281.00003472220

А?

Как так? Мы только вычли один день, так что только число до десятичная точка должна измениться.

Ну, Excel имеет встроенную точность всего 15 цифр для любого числа. Числа с большим количеством цифр будут округлены или последние цифры будут заменены нулями. Кроме того, в Excel существует известная ошибка, которая влияет на точность чисел при достижении 15-значного предела.

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

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

Посмотрите, поможет ли этот скриншот уточнить:

enter image description here

Значения в столбцах B – D - все ссылочные столбцы A. Единственная разница между A1 и A2 - это ручное изменение даты с 08/01 на 07/01 (где 01 - январь, согласно региональным настройкам DMY).

«Общий» формат показывает оба значения с десятичным значением x.0003. Расширение десятичных дробей показывает, что после десятичной дроби существует значительная разница в десятичных дробях.

Поскольку желаемый конечный результат представляет собой значение, которое показывает секунды и миллисекунды, десятичные дроби после 4-го десятичного разделителя действительно имеют значение, и когда значение отформатировано в пользовательском формате, который показывает секунды и миллисекунды, эта разница отображается (в столбце A).

Также обратите внимание на три ячейки с числами, состоящими всего из 15, 16 и 17 цифр по 1, и как Excel просто заменяет любую цифру после 15 на ноль, потому что она не может отображать более высокую точность.

teylyn
источник
Excel просто открывает файл без какого-либо мастера импорта. Языковой стандарт - Швейцария / немецкий, но мне интересно, почему Excel интерпретирует 08/01 как январь, а не 07/01.
Andrew J. Brehm
Ох, но 07/01 является 7 января, а не 1 июля !!! Я добавил еще несколько пояснений к ответу.
teylyn
Кроме того, вместо открытия файла CSV используйте Data & gt; Из текста & gt; (выберите файл CSV). Это покажет мастер импорта. Из тестов с вашим образцом данных, я вижу, что даты не приходят хорошо, так как они заключены в кавычки. Вы можете сначала использовать фиксированное разделение по ширине и выделить "|date|time|"|therestofthedata, Убедитесь, что при пошаговом выполнении мастера вы выбираете столбец «дата» и указываете порядок MDY. (продолжение ...)
teylyn
(... продолжение): теперь дата и время указаны в двух столбцах. Вставьте столбец и используйте формулу, чтобы добавить значения даты и времени, примените желаемый формат. Скопируйте и вставьте значения в формулу, а затем удалите два исходных столбца. На следующем шаге выберите столбец с оставшимися данными, которые еще не были объединены, и используйте Data & gt; Текст в столбцы, чтобы получить остальные данные в свои собственные столбцы с разделителем запятыми.
teylyn
"но 07/01 - 7 января, а не 1 июля !!!" Никогда не сомневался в этом. Было интересно, почему Excel видит это по-другому. Это было 08.01 января, но не 07.01.
Andrew J. Brehm
-2

Очень простое решение:

  1. Выберите все даты столбца.
  2. Выберите кнопку «Общие».
  3. Сортировать номер и номер сохраняются в виде текста отдельно.

    enter image description here

  4. Вы найдете данные в виде числа и даты в виде:

    enter image description here

  5. преобразовать формат даты в текст в столбец с опцией с разделителями и другими словами / - и т. д., как показано на вашей дате:

    enter image description here

    enter image description here

  6. Примените формулу даты как:

    enter image description here

  7. Затем сделайте специальную вставку даты (скопируйте и нажмите специальную вставку).

Ваша проблема решена.

Muhammad Ahmad
источник