• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

298
Views
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 3 years ago · Juan Pablo Isaza
2 answers
Answer question

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 3 years ago · Juan Pablo Isaza Report

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 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error