Pregunta

Quiero restar 1 día desde una fecha POSIX y terminan al mismo tiempo, alrededor de DST.

Por ejemplo, cuando agrego un día:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

Pero cuando voy pasado, se compensa:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

¿Cuál es la mejor manera de hacer frente a las diferencias de tiempo absolutos de todo el horario de verano? Por lo general, me encargo de esto mediante la conversión de las veces en cadenas y tratar con ellos por separado para que el horario de verano no se aplica.

¿Fue útil?

Solución

Su código está haciendo exactamente lo que le pide que lo haga, porque no le pida que sumar o restar un día, se le pidió que sumar o restar 24 horas . 24 horas (86400 segundos) antes de 2009-03-08 23:00:00 EDT es 2009-03-07 22:00:00 EST. No estoy familiarizado con las bibliotecas de investigación, pero estoy familiarizado con las funciones POSIX que se envuelven. Si se toma una POSIXct, disminuir su propiedad day por 1, y luego "refundición" a través de POSIXct POSIXlt (por ejemplo, para asegurar que se convierte en febrero -1º 31 de enero), entonces debería ser capaz de restar un día de forma fiable.

Otros consejos

datetimes tienda como UTC - o en este caso convertido al UTC restar un día hacia atrás y convertir la hora local. (Esto ignora saltos de segundos)

Hobbs, gracias! Necesito hacer un poco más de trabajo con él, pero restando de la ranura día trabaja en POSIXlt:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

Si lo que desea es contar los días, puede utilizar trunc al movimiento justo el día:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

El lubridate paquete proporciona dos clases TimeSpan adicionales que especifican lo que es un tanto confusa en el paquete base. De tha Manual:

duraciones

Duraciones medir la cantidad exacta de tiempo que se produce entre dos instantes. Esto puede crear resultados inesperados en relación con los tiempos de reloj si un salto segundo, año bisiesto, o cambio en el horario de verano (DST) se produce en el intervalo.

Periodos

Periodos miden el cambio en el tiempo de reloj que se produce entre dos instantes. Períodos proporcionan predicciones sólidas de la hora del reloj en la presencia de los segundos intercalares, los años bisiestos, y los cambios en el horario de verano.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top