Каково значение продолжительности ISO 8601 `P1M` (в секундах)?

Предположим, у меня есть продолжительность ISO 8601, выраженная как "P1M", В разговорной речи это означает "один месяц". Существует ли стандартное правило для преобразования этого числа в несколько секунд, если исходная дата неизвестна?

  • В течение 30-дневных месяцев это может быть 2 592 000 человек.
  • Для 31-дневного месяца это может быть 2 678 400 человек.
  • В феврале это может быть 2 419 200 или 2 505 600.

Моя интуиция говорит, что нет способа разрешить "один месяц" до точного количества секунд, не зная контекста, и где эти секунды указаны в календаре. Но существуют ли стандартные правила / условные обозначения для расчета этих длительностей абстрактным способом?

1 ответ

Из документации ISO 8601, которую я нашел (стр. 6 - http://xml.coverpages.org/ISO-FDIS-8601.pdf), кажется, что вы правы в том, что количество секунд в месяце не может быть определено окончательно. Тем не менее, он отмечает, что "В некоторых приложениях месяц рассматривается как единица времени в 30 дней", поэтому в зависимости от вашего приложения это может быть правильным подходом.

Различие между "Календарным временем" (годы, месяцы и т. Д.) И "Абсолютным временем" (часы, минуты, секунды и т. Д.) Иногда является важным. Например, некоторые люди могут жаловаться на 13 выплат по ипотечным кредитам за несколько лет, если они платят каждые 30 дней, а не каждый месяц.

Вы правы, продолжительность ISO 8601 зависит от контекста. Продолжительность - это период / интервал времени между двумя датами.

Пример:

2020-01-01/2020-02-01 = P1M = P31D
2020-02-01/2020-03-01 = P1M = P29D
2019-02-01/2019-03-01 = P1M = P28D

Если вы хотите, чтобы фиксированная продолжительность не зависела от контекста, используйте обозначение дня P30D, P60D, P90D... вместо.

То же самое относится и к годам:

2019-01-01/2020-01-01 = P1Y = P12M = P365D
2020-01-01/2021-01-01 = P1Y = P12M = P366D

Если у вас нет контекстной информации о продолжительности, например P1M полученный из базы данных или введенный пользователем, использовать по умолчанию текущий контекст.

//What is a duration of one month in seconds ?
P1M = ? (no context)
//Use default context
Today = 2020-03-31
2020-03-31/P1M = 2020-03-31/2020-04-31
=> P1M = P30D
//A month contains 2 592 000 seconds
Другие вопросы по тегам