Python datetime与timestamp之间的转换

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

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

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

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

import time
def timestamp_datetime(ts,type=‘ms‘):
    """
    输入时间戳,将时间戳转换为GMT0日期时间输出
    :param ts: int整型或int字符串,默认毫秒时间
    :param type: 时间类型,输入的数据为ms或s。默认ms
    :return: GMT0的time_struct类型(但time_struct其实不含tz信息)
    """
    ts = int(ts)
    if type.lower() == ‘ms‘:
        ts = ts/1000
    elif type.lower() == ‘s‘:
        pass
    else:
        print(‘错误!时间戳请选择s或ms‘)
        return

    str_format = ‘%Y-%m-%d %H:%M:%S‘
    dt0 = time.strftime(str_format, time.gmtime(ts)) #GMT0的日期
    return dt0

def datetime_timestamp(dt0, type=‘ms‘):
    """
    输入GMT0时间的日期(或日期字符串),输出int型时间戳。默认毫秒级
    :param dt0: GMT0的时间
    :param type: 输出的时间戳类型,ms级还是s级
    :return: int型时间戳
    """
    if isinstance(dt0, str):
        ts = time.mktime(time.strptime(dt0, ‘%Y-%m-%d %H:%M:%S‘))
    else:
        ts = time.mktime(dt0)

    delta = time.timezone # mktime默认时间是本地时间,需用 ts+delta 调整时区
    if type.lower() == ‘ms‘:
        ts0 = int(ts) * 1000 - delta * 1000
    elif type.lower() == ‘s‘:
        ts0 = int(ts) - delta
    else:
        print(‘错误!时间戳请选择s或ms‘)
        return

    return ts0

  

时间: 2024-10-06 05:53:01

Python datetime与timestamp之间的转换的相关文章

Java:String和Date、Timestamp之间的转换

一.String与Date(java.util.Date)互转 1.1 String -> Date Java代码   String dateStr = "2010/05/04 12:34:23"; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { date = sdf

String和Date、Timestamp之间的转换

Java:String和Date.Timestamp之间的转换 http://yunnick.iteye.com/blog/1074495 一.String与Date(java.util.Date)互转 1.1 String -> Date String dateStr = "2010/05/04 12:34:23"; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new Simple

python——时间与时间戳之间的转换

1.将时间转换成时间戳 将如上的时间2017-09-16 11:28:54转换成时间戳 利用strptime()函数将时间转换成时间数组 利用mktime()函数将时间数组转换成时间戳 #!/usr/bin/env python # -*- coding:utf-8 -*- import time dtime= "2017-09-16 11:28:54" #转换成时间数组 timeArray = time.strptime( dtime, "%Y-%m-%d %H:%M:%S

String和Date,Timestamp之间的转换

一.String与Date(java.util.Date)互转 1.1 String -> Date Java代码 String dateStr = “2010/05/04 12:34:23″; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”); try { date = sdf.parse(dateStr); Sys

python时间和时间戳之间的转换

(1)例如格式2012-07-31 00:01:18,根据该时间计算时间戳: 将"2012-03-28 06:53:40"转化为时间戳 s = time.mktime(time.strptime('2012-03-28 06:53:40', '%Y-%m-%d %H:%M:%S')) (2)根据时间戳得到如2012-07-31 00:01:18的时间格式,显示的时间形式可以根据format指定的 import time timestamp = time.strftime('%Y-%m-

[转]python str与bytes之间的转换

原文:http://www.cnblogs.com/zqifa/p/python-7.html # bytes object b = b"example" # str object s = "example" # str to bytes sb = bytes(s, encoding = "utf8") # bytes to str bs = str(b, encoding = "utf8") # an alternative

python str与bytes之间的转换

1 # bytes object 2 b = b"example" 3 4 # str object 5 s = "example" 6 7 # str to bytes 8 bytes(s, encoding = "utf8") 9 10 # bytes to str 11 str(b, encoding = "utf-8") 12 13 # an alternative method 14 # str to bytes 1

python 日期和时间之间的转换整理

1.获取当前时间戳 time.time() 2.获取当前时间 time.localtime() 3.获取格式化的日期时间 time.strftime(format,t) 4.将"%a %b %d %H:%M:%S %Y"(如:"Sat Mar 28 22:24:24 2016")格式化日期时间转换为时间戳 time.mktime(time.strptime(t,format)) 原文地址:https://www.cnblogs.com/lhj818/p/116706

python timestamp和datetime之间的转换

做开发中难免时间类型之间的转换, 最近就发现前端js和后端django经常要用到这个转换, 其中jsDate.now()精确到毫秒,而Python中Datetime.datetime.now()是精确到微秒的. 1. 字符串日期时间转换成时间戳 # '2015-08-28 16:43:37.283' --> 1440751417.283 # 或者 '2015-08-28 16:43:37' --> 1440751417.0 def string2timestamp(strValue): try