【问题标题】:Formatting Unix Timestampe to Python Datetime - Using Windows将 Unix 时间戳格式化为 Python 日期时间 - 使用 Windows
【发布时间】:2020-10-23 09:49:42
【问题描述】:

我读过很多帖子;但是,我无法解决这个问题。

我使用的是 Windows,所以我知道 Unix 时间戳以毫秒为单位显示;因此我将整数除以 1,000。但是,我还是收到了OSError: [Errno 22] Invalid argument

Unix时间戳到日期时间的转换函数:

def unix_to_datetime(x):    
    if type(x) == int:
        date = datetime.fromtimestamp(x/1000).strftime('%Y-%m-%d')
    else:
        date = x
    return date

我通过df_rank['date_formatted'] = df_rank['date'].apply(lambda x: unix_to_datetime(x))引用了这个函数

df_rank 数据框如下:

【问题讨论】:

    标签: python datetime unix timestamp


    【解决方案1】:

    请尝试以下更改。

    def unix_to_datetime(x):   
        try:
            date = datetime.fromtimestamp(int(x)/1000).strftime('%Y-%m-%d')
        except:
            date = x
        return date
    
    

    【讨论】:

      【解决方案2】:

      我找到了解决方案。 Unix 代码乘以 10 亿,而不是 1000。我想这是因为我使用fillna() 合并了总共 5 列。

      正确代码:

      def unix_to_datetime(x):    
          try:
              y = x / 1000000000
              date_str = datetime.fromtimestamp(y).strftime('%Y-%m-%d')
              date = datetime.strptime(date_str, '%Y-%m-%d').date()
          except:
              date = x
          return date
      

      【讨论】:

      • 澄清:datetime.fromtimestamp 期望输入是自纪元以来的pandas datetime 自纪元以来在内部存储为 纳秒 - 这似乎是你所拥有的......这就是你必须除以 1e9 的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2020-10-19
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多