Converting unix seconds in milliseconds to POSIXct/POSIXlt

后端 未结 1 1819
庸人自扰
庸人自扰 2020-12-14 09:04

Why do I see a difference when I convert a unix timestamp to datetime object in R?

> as.POSIXlt(1268736919, origin=\"1970-01-01\", tz=\"America/New_York\"         


        
相关标签:
1条回答
  • 2020-12-14 09:57

    The help page actually hints at a difference:

    Value:
    
         ‘as.POSIXct’ and ‘as.POSIXlt’ return an object of the appropriate
         class.  If ‘tz’ was specified, ‘as.POSIXlt’ will give an
         appropriate ‘"tzone"’ attribute.
    

    This stuff is finicky -- I think there is an implicit TZ conversion happening for as.POSIXct. Consider that

    R> print(as.numeric(as.POSIXct(as.POSIXlt(1268736919, 
                                   origin="1970-01-01"))), digits=10)
    [1] 1268736919
    R> print(as.numeric(as.POSIXct(1268736919, origin="1970-01-01")), digits=10)
    [1] 1268758519
    

    the second one (using as.POSIXct) does not return the original input. Unfortunately, Brian D. Ripley seems to be the only human having all the details here.

    Lastly, you can't do it without the origin. But you could define wrappers that use the epoch as origin (as here) or use 2000-01-01 or ... Just keep it consistent.

    0 讨论(0)
提交回复
热议问题