zoukankan      html  css  js  c++  java
  • Python datetime与timestamp之间的转换

    # !!!! Python 2 datetime.datetime 对象没有timestamp方法!

    在用Python处理datetime和timestamp的转换时发现在时区方面,Python的处理是个大坑。

    因为Python的time是默认localtime输入来处理的,导致脚本在本地运行和在服务器运行会得到不一样的结果。一不注意就会中招。

    R中也会碰到时区的问题,但是R的方法提供了tz选项来指定日期的时区,简化了问题。而Python 中的time.mktime无法对时区进行指定,带来了很多麻烦。查了很久,发现有一个time.timezone的属性,可以根据运行脚本的机器的时间,来灵活处理时区问题。

    以下是datetime与timestamp转换的方法, 输入和输出都以GMT0为准.

     1 from datetime import datetime
     2 import time
     3 
     4 
     5 def timestamp_datetime(ts):
     6     if isinstance(ts, (int, float, str)):
     7         try:
     8             ts = int(ts)
     9         except ValueError:
    10             raise
    11 
    12         if len(str(ts)) == 13:
    13             ts = int(ts / 1000)
    14         if len(str(ts)) != 10:
    15             raise ValueError
    16     else:
    17         raise ValueError()
    18 
    19     return datetime.fromtimestamp(ts)
    20 
    21 
    22 def datetime_timestamp(dt, type='ms'):
    23     if isinstance(dt, str):
    24         try:
    25             if len(dt) == 10:
    26                 dt = datetime.strptime(dt.replace('/', '-'), '%Y-%m-%d')
    27             elif len(dt) == 19:
    28                 dt = datetime.strptime(dt.replace('/', '-'), '%Y-%m-%d %H:%M:%S')
    29             else:
    30                 raise ValueError()
    31         except ValueError as e:
    32             raise ValueError(
    33                 "{0} is not supported datetime format." 
    34                 "dt Format example: 'yyyy-mm-dd' or yyyy-mm-dd HH:MM:SS".format(dt)
    35             )
    36 
    37     if isinstance(dt, time.struct_time):
    38         dt = datetime.strptime(time.stftime('%Y-%m-%d %H:%M:%S', dt), '%Y-%m-%d %H:%M:%S')
    39 
    40     if isinstance(dt, datetime):
    41         if type == 'ms':
    42             ts = int(dt.timestamp()) * 1000
    43         else:
    44             ts = int(dt.timestamp())
    45     else:
    46         raise ValueError(
    47             "dt type not supported. dt Format example: 'yyyy-mm-dd' or yyyy-mm-dd HH:MM:SS"
    48         )
    49     return ts
    50 
    51 
    52 if __name__ == '__main__':
    53     try:
    54         print(datetime_timestamp('2015-01-01 20:20:00', 's'))
    55         print(timestamp_datetime(1420114800))
    56         print(timestamp_datetime(1420114800123))
    57     except Exception as e:
    58         print(e.args[0])

      

  • 相关阅读:
    Fragment 总结
    Varnish缓存服务器的搭建配置手册
    关于页面缓存服务器的研究报告
    基于Html5的移动端开发框架的研究
    C#的Process类的一些用法
    c#中进程的使用
    C#反射(转载)
    进制的转换 以及十进制转换成x进制的代码
    算法及其复杂度
    cocos总结
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/6897950.html
Copyright © 2011-2022 走看看