Как рассчитать количество секунд между двумя датами и временем ISO 8601 в Excel? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 2 строки даты и времени в формате ISO 8601, например, 1900-01-01 00:00:00+00:00 и 2020-03-27 23:59:59+11:00. Как я могу рассчитать количество секунд между этими 2 строками даты и времени, используя только Excel или Excel VBA?

Все ответы, которые мне встречаются, рассчитывают только часть даты, даже если вопросы задавались за время штамп.

Function TOUNIX(dt) As Long
    TOUNIX = DateDiff("s", "1/1/1970", dt)
End Function

Ответы [ 2 ]

1 голос
/ 30 марта 2020

вы захотите взглянуть на следующие функции.

Для работы с текстом:

Для манипуляции с датой:

Для манипуляции временем:

У вас есть несколько вариантов. Вы можете вырезать каждое отдельное значение и поместить его в соответствующую отдельную функцию даты / времени или переставить дату и время в виде строки, которая может быть идентифицирована функциями значения времени / даты.

Небольшой фон для даты и время в Excel. Дата хранится в виде целого числа. 1 представляет 1900/1/1, 2 представляет 1900/1/2 и так далее. время хранится в виде десятичной дроби, представляющей часть дня. 00:00 - полночь и хранится как ноль, 12:00 - как 0,5, что соответствует половине дня. 24:00 - это не официальное время Excel, хотя некоторые функции будут работать с ним. Чтобы проверить, хранятся ли дата / время в виде текста или номера Excel, вы можете проверить значение ячейки, например, ISTEXT(A1), изменить форматирование на общее и посмотреть, изменится ли отображение информации о ячейке, и как минимум Надежно смотреть на обоснование информации в ячейке, которая выровнена по умолчанию для текста и выровнена по умолчанию для чисел.

Предположим, что ваши строки хранятся в A1 и A2

Потому что Datevalue может быть немного привередливым и немного зависит от настроек системы, чтобы определить мм против дд I go с методом удаления отдельных компонентов. В вашем случае, поскольку все содержит начальные нули, положение месяца, дня, часа, минуты и секунды может быть жестко запрограммировано вместо поиска начальной позиции строки для каждого из ключевых символов, таких как -,:, + и пробел.

Захватите год:

=LEFT(A1,4)

Захватите месяц:

=MID(A1,6,2)

Захватите день:

=MID(A1,9,2)

Создайте дату, опустив результаты в ДАТА выглядит следующим образом:

=DATE(LEFT(A1,4),MID(A1,6,2),MID(A1,9,2))

Захватите час:

=MID(A1,12,2)

Захватите минуты:

=MID(A1,15,2)

Захватите секунды:

=MID(A1,18,2)

Сделайте время, поместив результаты в TIME следующим образом:

=TIME(MID(A1,12,2),MID(A1,15,2),MID(A1,18,2))

Чтобы получить часовой пояс, я буду использовать TIMEVALUE, чтобы продемонстрировать другой метод. Это преобразует время или десятичное значение часового пояса вместо текста, как описано выше.

Захватите часовой пояс:

=TIMEVALUE(RIGHT(A1,5)*IF(LEFT(RIGHT(A1,6))="-",-1,1)

Тогда вам просто нужно объединить результаты вместе, чтобы получить все это в формате даты и времени в Excel:

=DATE(LEFT(A1,4),MID(A1,6,2),MID(A1,9,2))+TIME(MID(A1,12,2),MID(A1,15,2),MID(A1,18,2))-TIMEVALUE(RIGHT(A1,5))*IF(LEFT(RIGHT(A1,6))="-",-1,1)

Теперь, когда строка преобразована в дату Excel, вам нужно взять разницу в ячейках, отметив, что результатом являются дни. Затем вам нужно преобразовать его в секунды, умножив его на 24 * 60 * 60 = 86400.

Поэтому, если вы поместите результаты в B1 и B2, тогда формула для разницы в секундах будет такой:

=(B2-B1)*24*60*60

В приведенном ниже примере (F14-F12). Также обратите внимание, что для ячеек, отображающих время или дату и время, было применено пользовательское форматирование для отображения 24-часовых часов или даты и времени вместе взятых.

POC

1 голос
/ 30 марта 2020

Разбит для понимания / в образовательных целях:

  • LEFT(A1,FIND("+",A1)-1)-1 - извлекает дату
  • (VALUE(LEFT(A1,FIND("+",A1)-1)-1) - преобразует дату в число (-1 для учета первая секунда: 0)
  • (LEFT(MID(A1,FIND("+",A1)+1,5),2) - извлечение часа из часового пояса
  • RIGHT(MID(A1,FIND("+",A1)+1,5),2) - извлечение минут из часового пояса
  • /60 - 60 минут в час
  • /24 - 24 часа в день
  • IF(LEFT(RIGHT(A1,6),1)="-",1,-1) - извлечь модификатор часового пояса, чтобы определить, прибавляет ли часовой пояс значение или вычитает из значения
  • Комбинированный к этому моменту у нас есть число, преобразованное в число даты
  • * 86400 - количество секунд в дне

=(VALUE(LEFT(A1,FIND("+",A1)-1)-1)+((LEFT(MID(A1,FIND("+",A1)+1,5),2)+(RIGHT(MID(A1,FIND("+",A1)+1,5),2)/60))/24)*IF(LEFT(RIGHT(A1,6),1)="-",1,-1))*86400

Где вы начинаются с 0, вам не нужно вычитать из другой даты. Если вы все равно хотите, просто дублируйте формулу по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...