El 30 de junio de 2012 tuvo un segundo bisiesto . Como tal, duró 86401 segundos. Sin embargo, en el siguiente código Swift, timeInterval es 86400. ¿Por qué? 🤔
let formatter = ISO8601DateFormatter() let date = formatter.date(from: "2012-06-30T00:00:00Z")! let dayAfter = formatter.date(from: "2012-07-01T00:00:00Z")! let timeInterval = date.distance(to: dayAfter)(PD: ¿en qué contexto escribí este código? Solo se trataba de divertirme con el código. Estaba tratando de escribir resultados de código confusos, pero me decepcionó este intento de tratar de ser inteligente)
La base para las API de fecha y hora de Apple y las implementaciones del sistema es la biblioteca de ICU , y los fundamentos de la mayoría de los resultados que ve dependen del comportamiento de ICU. En particular, ICU no admite ni considera la existencia de segundos bisiestos :
Por razones históricas, el punto de referencia es Greenwich, Inglaterra. La hora local en Greenwich se conoce como Greenwich Mean Time o GMT. (Esto es similar, pero no exactamente idéntico, al tiempo universal coordinado, o UTC. Usamos los dos términos indistintamente en ICU ya que ICU no se ocupa de los segundos intercalares ni del comportamiento histórico).
Como tal, las plataformas de Apple tampoco representan segundos bisiestos históricos (o futuros) de ninguna manera en las API; los sistemas manejan efectivamente los segundos bisiestos a través de NTP y simplemente configuran sus relojes de manera adecuada, pero consultar segundos bisiestos como este no arrojará nada.