关于日期时间:用python将当前时间转换gmt

Substract current time to -GMT in python

我有一个时间是13:11:06,我想-格林尼治标准时间(即-0530)。我可以通过简单地做-5减去它,方法是将字符串拆分为第一个数字(转换为int),然后减去它,然后重新连接。但我得到的格式是8:11:06,这是不正确的,因为它应该是08:11:06,其次是一个漫长的过程。有没有一种简单的方法可以让我的时间以格林尼治标准时间格式(08:11:06)计算?

这是我在得到日期时间之后得到的-gmt时间

1
2
3
4
5
6
7
timesplithour = int(timesplit[1]) + -5
timesplitminute = timesplit[2]
timesplitseconds = timesplit[3]
print timesplithour
print timesplitminute
print timesplitseconds
print timesplithour +":" + timesplitminute +":" + timesplitseconds


使用datetime模块:

1
2
3
4
5
6
7
8
9
10
from datetime import datetime, timedelta

dt = datetime.strptime('13:11:06', '%H:%M:%S')
time_gmt = (dt - timedelta(hours=5, minutes=30)).time()

print(time_gmt.hour)
print(time_gmt.minute)
print(time_gmt.second)
s = time_gmt.strftime('%H:%M:%S')
print(s)

产量

1
2
3
4
7
41
6
07:41:06

请注意,这将减去问题中最初提到的5小时30分钟。如果您真的只想减去5小时,请使用timedelta(hours=5)


您可以使用python的datatime库来帮助您,如下所示:

1
2
3
4
5
import datetime

my_time ="13:11:06"
new_time = datetime.datetime.strptime("2016" + my_time,"%Y %H:%M:%S") - datetime.timedelta(hours=5, minutes=30)
print new_time.strftime("%H:%M:%S")

这将打印:

1
 07:41:06

首先,它将字符串转换为datetime对象。然后它创建一个timedelta对象,允许您从datetime对象中减去5小时30分钟。最后,它使用strftime将生成的日期时间格式化为相同格式的字符串。


如果对象是datetime,而您不关心dst,那么您可以做的最简单的事情是,

1
2
3
4
5
6
7
8
9
In [1]: from datetime import datetime

In [2]: curr = datetime.now()

In [3]: curr
Out[3]: datetime.datetime(2016, 3, 3, 9, 57, 31, 302231)

In [4]: curr.utcnow()
Out[4]: datetime.datetime(2016, 3, 3, 8, 57, 57, 286956)

假设时间是日期时间实例

1
2
3
4
5
6
7
8
9
10
import datetime as dt
t = datetime(2015,12,31,13,11,06)
#t.time() # gives time object. ie no date information

offset = dt.timedelta(hours=5,minutes=30) # or hours=5.5

t -= offset    

t.strftime(("%H:%M:%S") # output as your desired string
#'18:41:06'

您可以使用datetimes timedelta。

1
2
3
4
print datetime.datetime.today()
>>> datetime.datetime(2016, 3, 3, 10, 45, 6, 270711)
print datetime.datetime.today() - datetime.timedelta(days=3)
>>> datetime.datetime(2016, 2, 29, 10, 45, 8, 559073)

这样你就可以很容易地减去