Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

354
Visualizações
La hora UTC se muestra incorrectamente como hora local

Descubrí que algunas fechas (por el momento solo encontré este error con algunas fechas anteriores) agregan una hora de diferencia con respecto a UTC.

La hora local es GMT-3

La primera vez que lo veo fue en Javascript

 > new Date("1969-07-26T03:00:00+00:00") < Fri Jul 25 1969 23:00:00 GMT-0400 (-03) // why is it -0400? > new Date("1963-07-26T03:00:00+00:00") < Fri Jul 26 1963 00:00:00 GMT-0300 (-02)

Luego probé en Ruby y pasó lo mismo

 irb(main):288:0> Time.parse("1969-07-26T03:00:00+00:00").localtime => 1969-07-25 23:00:00 -0400

Pero (tal vez lo hice mal) no sucede en Python

 In [12]: utc = datetime.fromisoformat("1969-07-26T03:00:00+00:00") In [13]: utc.replace(tzinfo=tz.tzutc()) Out[13]: datetime.datetime(1969, 7, 26, 3, 0, tzinfo=tzutc()) In [14]: utc.astimezone(tz.tzlocal()) Out[14]: datetime.datetime(1969, 7, 26, 0, 0, tzinfo=tzlocal())

No he sido capaz de encontrar información al respecto. ¿Algo para leer y cómo manejar esos casos? Por ejemplo, 1963-07-26T03:00:00+00:00 funciona como se esperaba.

¡Salud!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Agregar +00:00 al final de su cadena de fecha está creando un desplazamiento UTC. Dado que está especificando cero horas, cero minutos y cero segundos, está creando una compensación cero desde GMT o, en otras palabras, configurando su zona horaria exactamente en GMT.

Por ejemplo, estoy en una zona horaria GMT -5 (centro de EE. UU.). Cuando creo una nueva fecha JS usando la fecha de hoy a las 6 am, obtengo una resta de 5 horas (porque GMT -5 es mi zona horaria):

 > new Date("2022-06-08T06:00:00+00:00") // Wed Jun 08 2022 01:00:00 GMT-0500 (Central Daylight Time)

Sin embargo, si omito el desplazamiento, funciona como se esperaba y obtengo la fecha en mi zona horaria local.

 > new Date("2022-06-08T06:00:00") // Wed Jun 08 2022 06:00:00 GMT-0500 (Central Daylight Time)

También puedo ejecutar sus ejemplos de código y obtener el resultado esperado.

 > new Date("1969-07-26T03:00:00") // Sat Jul 26 1969 03:00:00 GMT-0500 (Central Daylight Time)

Consulte la sección Formato de cadena de fecha y hora en la especificación ECMAScript para obtener más detalles.

about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que la razón es que desde el domingo 6 de abril de 1969 a las 00:00 hasta el domingo 5 de octubre de 1969 a las 00:00, la zona horaria America/Buenos_Aires observó un desplazamiento UTC de UTC-4h. Entonces, no creo que esto sea un error, sino que refleja cuáles eran las compensaciones UTC en este momento.

Antes del 1 de octubre de 1963 a las 00:00 (desde ~1946), el desplazamiento UTC siempre era de 3 horas sin horario de verano.

Por lo tanto, el desplazamiento de UTC en esta zona horaria ha variado con el tiempo, de UTC-2 a UTC-4, según el año y la fecha. Desde el domingo 15 de marzo de 2009, el desplazamiento UTC ha sido UTC-3.

Agregaré más ejemplos de las diferentes compensaciones de UTC a continuación, dos de su ejemplo original y algunos más para ilustrar las diferentes compensaciones de UTC.

 const timeZone = 'America/Buenos_Aires'; const fmt1 = new Intl.DateTimeFormat('en-GB', { timeStyle: "medium", dateStyle: "medium", timeZone: 'UTC'}); const fmt2 = new Intl.DateTimeFormat('en-GB', { timeStyle: "long", dateStyle: "medium", timeZone}); const examples = [ new Date("1962-07-26T03:00:00+00:00"), new Date("1963-07-26T03:00:00+00:00"), new Date("1964-07-26T03:00:00+00:00"), new Date("1969-07-26T03:00:00+00:00"), new Date("2008-10-19T03:00:00+00:00"), new Date("2010-07-26T03:00:00+00:00"), new Date("2020-07-26T03:00:00+00:00"), ]; console.log('UTC'.padEnd(25, ' '), 'Local time'); for(let dt of examples) { console.log(fmt1.format(dt).padEnd(25, ' '), fmt2.format(dt)); }
 .as-console-wrapper { max-height: 100% !important; }

Aquí hay una lista de los cambios de compensación UTC para la zona horaria desde 1950 en adelante, esto ilustra el hecho de que ha cambiado muchas veces. hasta 2009 cuando se ha mantenido en UTC-3.

 let { IANAZone, DateTime } = luxon; const timeZone = new IANAZone('America/Buenos_Aires'); let date = DateTime.fromISO('1950-01-01T03:00:00Z').setZone('UTC'); let endDate = DateTime.now(); let lastOffset = 0; function formatUTCOffset(offsetMinutes) { return (offsetMinutes / 60) + ':' + String(offsetMinutes % 60).padStart(2, '0'); } console.log('Time'.padEnd(24, ' '), '\t', 'UTC Offset') while (date < endDate) { if (lastOffset !== timeZone.offset(date)) { console.log(date.toISO(), '\t', formatUTCOffset(timeZone.offset(date))); lastOffset = timeZone.offset(date); } date = date.plus( { day: 1 } ); }
 .as-console-wrapper { max-height: 100% !important; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.3.1/luxon.min.js" integrity="sha512-Nw0Abk+Ywwk5FzYTxtB70/xJRiCI0S2ORbXI3VBlFpKJ44LM6cW2WxIIolyKEOxOuMI90GIfXdlZRJepu7cczA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda