pythondatetime時區
『壹』 python中datetime中now和utcnow的區別
now是本地時間,可以認為是你電腦現在的時間
utcnow是世界時間(時區不同,所以這兩個是不一樣的)
[python] view plain
from datetime import datetime
print datetime.now()
print datetime.utcnow()
2016-12-25 15:18:48.384000
2016-12-25 07:18:48.384000
『貳』 python datetime處理時間
python時間處理方法datetime(),下面就舉幾個代碼案例進行說明,代碼如下:
#-*-coding:utf-8-*-
#運行環境:Python3.4
#datetime類
#datetime是date與time的結合體,包括date與time的所有信息。
#它的構造函數如下:
#datetime.datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]])
#各參數的含義與date、time的構造函數中的一樣,要注意參數值的范圍。
#1.datetime類定義的類屬性與方法:
#datetime.min、datetime.max:datetime所能表示的最小值與最大值;
#print:datetime.max:9999-12-3123:59:59.999999
#print:datetime.min:0001-01-0100:00:00
fromdatetimeimport*
importtime
print('datetime.max:'+str(datetime.max))
print('datetime.min:'+str(datetime.min))
#datetime.resolution:datetime最小單位;
#print:datetime.resolution:0:00:00.000001
print('datetime.resolution:'+str(datetime.resolution))
#datetime.today():返回一個表示當前本地時間的datetime對象;
#print:today():2012-09-1219:37:50.721000
print('today():'+str(datetime.today()))
#datetime.now([tz]):返回一個表示當前本地時間的datetime對象,如果提供了參數tz,則獲取tz參數所指時區的本地時間;
#print:now():2012-09-1219:37:50.738000
print('now():'+str(datetime.now()))
#datetime.utcnow():返回一個當前utc時間的datetime對象;
#print:2012-09-1211:37:50.739000
print('utcnow():'+str(datetime.utcnow()))
#datetime.fromtimestamp(timestamp[,tz]):根據時間戮創建一個datetime對象,參數tz指定時區信息;
#print:fromtimestamp(tmstmp):2012-09-1219:37:50.741000
print('fromtimestamp(tmstmp):'+str(datetime.fromtimestamp(time.time())))
#datetime.utcfromtimestamp(timestamp):根據時間戮創建一個datetime對象;
#print:utcfromtimestamp(tmstmp):2012-09-1211:37:50.742000
print('utcfromtimestamp(tmstmp):'+str(datetime.utcfromtimestamp(time.time())))
#datetime.combine(date,time):根據date和time,創建一個datetime對象;
#print:datetime.combine(date,time):2012-09-1219:46:05
d=date(2012,9,12)
fromdatetimeimport*
t=time(19,46,5)
print('datetime.combine(date,time):'+str(datetime.combine(d,t)))
#datetime.strptime(date_string,format):將格式字元串轉換為datetime對象;
#print:2007-03-0421:08:12
print(datetime.strptime("2007-03-0421:08:12","%Y-%m-%d%H:%M:%S"))
#2.datetime類提供的實例方法與屬性
dt=datetime.strptime("2012-09-1221:08:12","%Y-%m-%d%H:%M:%S")
#print:2012912218120None
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)
print(dt.tzinfo)
print(dt.date())
print(dt.time())
print(dt.replace(year=2013))
print(dt.timetuple())
print(dt.utctimetuple())
print(dt.toordinal())
print(dt.weekday())
print(dt.isocalendar())
#printdt.isoformat([sep])
#datetime.ctime():返回一個日期時間的C格式字元串,等效於time.ctime(time.mktime(dt.timetuple()));
#3.格式字元串
#datetime.strftime(format)
#%a星期的簡寫。如星期三為Web
#%A星期的全寫。如星期三為Wednesday
#%b月份的簡寫。如4月份為Apr
#%B月份的全寫。如4月份為April
#%c:日期時間的字元串表示。(如:04/07/1010:43:39)
#%d:日在這個月中的天數(是這個月的第幾天)
#%f:微秒(范圍[0,999999])
#%H:小時(24小時制,[0,23])
#%I:小時(12小時制,[0,11])
#%j:日在年中的天數[001,366](是當年的第幾天)
#%m:月份([01,12])
#%M:分鍾([00,59])
#%p:AM或者PM
#%S:秒(范圍為[00,61],為什麼不是[00,59],參考python手冊~_~)
#%U:周在當年的周數當年的第幾周),星期天作為周的第一天
#%w:今天在這周的天數,范圍為[0,6],6表示星期天
#%W:周在當年的周數(是當年的第幾周),星期一作為周的第一天
#%x:日期字元串(如:04/07/10)
#%X:時間字元串(如:10:43:39)
#%y:2個數字表示的年份
#%Y:4個數字表示的年份
#%z:與utc時間的間隔(如果是本地時間,返回空字元串)
#%Z:時區名稱(如果是本地時間,返回空字元串)
#%%:%%=>%
dt=datetime.now()
#print:(%Y-%m-%d%H:%M:%S%f):2012-09-1223:04:27145000
print('(%Y-%m-%d%H:%M:%S%f):'+str(dt.strftime('%Y-%m-%d%H:%M:%S%f')))
#print:(%Y-%m-%d%H:%M:%S%p):12-09-1211:04:27PM
print('(%Y-%m-%d%H:%M:%S%p):'+str(dt.strftime('%y-%m-%d%I:%M:%S%p')))
#print:%a:Wed
print('%%a:%s'%dt.strftime('%a'))
#print:%A:Wednesday
print('%%A:%s'%dt.strftime('%A'))
#print:%b:Sep
print('%%b:%s'%dt.strftime('%b'))
#print:%B:September
print('%%B:%s'%dt.strftime('%B'))
#print:日期時間%c:09/12/1223:04:27
print('日期時間%%c:%s'%dt.strftime('%c'))
#print:日期%x:09/12/12
print('日期%%x:%s'%dt.strftime('%x'))
#print:時間%X:23:04:27
print('時間%%X:%s'%dt.strftime('%X'))
#print:今天是這周的第3天
print('今天是這周的第%s天'%dt.strftime('%w'))
#print:今天是今年的第256天
print('今天是今年的第%s天'%dt.strftime('%j'))
#print:今周是今年的第37周
print('今周是今年的第%s周'%dt.strftime('%U'))
上面代碼案例運行結果如下:
atetime.max:9999-12-3123:59:59.999999
datetime.min:0001-01-0100:00:00
datetime.resolution:0:00:00.000001
today():2014-05-0415:58:18.141186
now():2014-05-0415:58:18.193146
utcnow():2014-05-0407:58:18.243958
fromtimestamp(tmstmp):2014-05-0415:58:18.291558
utcfromtimestamp(tmstmp):2014-05-0407:58:18.342550
datetime.combine(date,time):2012-09-1219:46:05
2007-03-0421:08:12
2012
9
12
21
8
12
0
None
2012-09-12
21:08:12
2013-09-1221:08:12
time.struct_time(tm_year=2012,tm_mon=9,tm_mday=12,tm_hour=21,tm_min=8,tm_sec=12,tm_wday=2,tm_yday=256,tm_isdst=-1)
time.struct_time(tm_year=2012,tm_mon=9,tm_mday=12,tm_hour=21,tm_min=8,tm_sec=12,tm_wday=2,tm_yday=256,tm_isdst=0)
734758
2
(2012,37,3)
(%Y-%m-%d%H:%M:%S%f):2014-05-0415:58:19326295
(%Y-%m-%d%H:%M:%S%p):14-05-0403:58:19PM
%a:Sun
%A:Sunday
%b:May
%B:May
日期時間%c:SunMay415:58:192014
日期%x:05/04/14
時間%X:15:58:19
今天是這周的第0天
今天是今年的第124天
今周是今年的第18周
『叄』 python date,datetime 和time的區別
這是三個不同類型的數據,例如 2015-11-21 10:51:20:
date是日期,表示的是 2015-11-21;
datetime是日期時間,表示的是 2015-11-21 10:51:20;
time是時間,表示的是 10:51:20。
『肆』 python中怎麼把datetime類型轉換成timestamp
Python3.6.4(v3.6.4:d48ecebad5,Dec182017,21:07:28)
[GCC4.2.1(AppleInc.build5666)(dot3)]ondarwin
Type"help","right","credits"or"license"formoreinformation.
>>>importtime
>>>fromdatetimeimportdatetime
>>>now=datetime.now()
>>>timestamp=int(time.mktime(now.timetuple()))
>>>timestamp
1520493295
>>>timestamp_microsecond=float('{}{:06}'.format(timestamp,now.microsecond))/1000000
>>>timestamp_microsecond
1520493295.337066
『伍』 python中datetime怎麼設置時區
1、默認情況下,pandas中的時間序列是單純(naive)的時區,其索引的tz欄位為None。
『陸』 python中import datetime是什麼意思
引用datetime模塊,使用其中的相關函數。
datetime模塊提供了可以通過多種方式操作日期和時間的類。在支持日期時間數學運算的同時,實現的關注點更著重於如何能夠更有效地解析其屬性用於格式化輸出和數據操作。相關功能可以參閱time和calendar模塊。
有兩種日期和時間的對象:「簡單型「和」感知型「。
感知型對象有著用足以支持一些應用層面演算法和國家層面時間調整的信息,例如時區和夏令時,來讓自己和其他的感知型對象區別開來。感知型對象是用來表達不對解釋器開放的特定時間信息1。
簡單型對象沒包含足夠多的信息來明確定位與之相關的 date/time 對象。 簡單型對象所代表的是世界標准時間(UTC)、當地時間或者是其它時區的時間完全取決於程序,就像一個數字是代表的是米、英里或者質量完全取決於程序一樣。 簡單型對象以忽略了一些現實情況的為代價使得它容易理解和使用。
對於需要感知型對象的應用,datetime對象和time對象有一個可選的時區信息屬性tzinfo,這個屬性可以設置給tzinfo類的子類實例。這些tzinfo對象捕獲關於相對於世界標准時間(UTC)偏移、時區名字和夏令時是否有效等信息。需要注意的是,只有一個具體的tzinfo類,即由datetime模塊提供的timezone類。timezone類可以代表相對於世界標准時間(UTC)固定偏移的簡單時區,比如世界標准時間(UTC)自己或者北美東部時間或者東部夏令時。支持時區的詳細程度取決於應用。世界各地的時間調整規則相比理性更加政治性,經常會變更。也沒有一個基於世界標准時間(UTC)的標准套件適合用於所有應用。
有效的類型
classdatetime.date
一個理想化的簡單型日期,它假設當今的公歷在過去和未來永遠有效。 屬性:year,month, andday。
classdatetime.time
一個理想化的時間,它獨立於任何特定的日期,假設每天一共有 24*60*60 秒(這里沒有"閏秒"的概念)。 屬性:hour,minute,second,microsecond, 和tzinfo。
classdatetime.datetime
日期和時間的結合。屬性:year,month,day,hour,minute,second,microsecond, andtzinfo.
classdatetime.timedelta
表示兩個date對象或者time對象,或者datetime對象之間的時間間隔,精確到微秒。
classdatetime.tzinfo
一個描述時區信息的抽象基類。用於給datetime類和time類提供自定義的時間調整概念(例如,負責時區或者夏令時)。
classdatetime.timezone
一個實現了tzinfo抽象基類的子類,用於表示相對於 世界標准時間(UTC)的偏移量。
『柒』 pythonmktime 函數 時區
這個問題得分成幾個子問題
1 資料庫本身的時區
2 資料庫里數據的時區
3 python代碼里的時區
首先對1你可以通過命令去設置資料庫的時區 像mysql直接用sql語句就能設置
其次對2 在存儲時間時盡量用timestamp去存儲 這樣讀出來可以方便的轉成所需用的時區的時間
3 python自己的時區 比如你用datetime生成時間時需要每次都記得時區設置 在django和flask里設置好默認時區
做好這三點才能保證程序和資料庫和數據的時區保持統一
『捌』 python 獲取系統時間有問題(時區)
確保系統時區設置正確。date命令顯示的是本地時間。
然後 python datetime.now() 默認就是本地時間。
>>>importdatetime
>>>datetime.datetime.now()
datetime.datetime(2016,8,5,16,51,52,67275)
>>>print(datetime.datetime.now())
2016-08-0516:51:59.972713
>>>
『玖』 Python中處理時間的幾種方法小結
python中的時間模塊主要有time, datetime。
I, time模塊
time模塊中包含了四種時間格式:
float格式,即給定時間相對於epoch增加的秒數
tuple格式,一個九元組 (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)
string格式,'Mon Feb 6 15:00:06 2012'
format格式,以指定的格式生成的時間
針對這幾種時間格式,time模塊提供了函數在格式之間相互轉換。
asctime(tuple) ->string
ctime(float) ->string
gmtime(float) ->tuple
localtime(float) ->tuple
mktime(tuple) ->float
strftime(format, tuple) ->format string
strptime(formatstring, format) ->tuple
time() -> float
上述函數中,除了time()函數直接返回當前時間相對於epoch的秒數外,其他函數都要求有時間的輸入,如果沒有輸入,則默認使用當前時間。
另外,strftime和strptime中的format使用下面的格式:
%a 英文星期簡寫
%A 英文星期的完全
%b 英文月份的簡寫
%B 英文月份的完全
%c 顯示本地日期時間
%d 日期,取1-31
%H 小時, 0-23
%I 小時, 0-12
%m 月, 01 -12
%M 分鍾,1-59
%j 年中當天的天數
%w 顯示今天是星期幾
%W 第幾周
%x 當天日期
%X 本地的當天時間
%y 年份 00-99間
%Y 年份的完整拼寫
%S 秒(00-59)
除了上述的時間轉換函數之外,模塊還提供了下面的函數:
clock() 返回進程的創建時間,以秒計數的float
sleep(float) sleep一段時間,以秒計數
tzset() 更改時區
II, datetime
datetime模塊定義了下面這幾個類:
datetime.date:表示日期的類。常用的屬性有year, month, day;datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond;datetime.datetime:表示日期時間。datetime.timedelta:表示時間間隔,即兩個時間點之間的長度。datetime.tzinfo:與時區有關的相關信息。(這里不詳細充分討論該類,感興趣的童鞋可以參考python手冊)
注 :上面這些類型的對象都是不可變(immutable)的。
下面詳細介紹這些類的使用方式。
date類
date類表示一個日期。日期由年、月、日組成(地球人都知道~~)。date類的構造函數如下:
class datetime.date(year, month, day):參數的意義就不多作解釋了,只是有幾點要注意一下:
year的范圍是[MINYEAR, MAXYEAR],即[1, 9999];month的范圍是[1, 12]。(月份是從1開始的,不是從0開始的~_~);day的最大值根據給定的year, month參數來決定。例如閏年2月份有29天;
date類定義了一些常用的類方法與類屬性,方便我們操作:
date.max、date.min:date對象所能表示的最大、最小日期;date.resolution:date對象表示日期的最小單位。這里是天。date.today():返回一個表示當前本地日期的date對象;date.fromtimestamp(timestamp):根據給定的時間戮,返回一個date對象;datetime.fromordinal(ordinal):將Gregorian日歷時間轉換為date對象;(Gregorian Calendar :一種日歷表示方法,類似於我國的農歷,西方國家使用比較多,此處不詳細展開討論。)
『拾』 python中datetime怎麼設置時區
如果你的程序要考慮時區,可以使用pytz。datetime模塊中有tzinfo相關的東西,但是它是一個抽象類,文檔上說:
tzinfo is an abstract base clase, meaning that this class should not be instantiated directly. You need to derive a concrete subclass, and (at least) supply implementations of the standard tzinfo methods needed by the datetimemethods you use. The datetime mole does not supply any concrete subclasses of tzinfo.
上面是說tzinfo是一個抽象類,不應該被直接實例化。你需要派生子類,提供相應的標准方法。datetime模塊並不提供tzinfo的任何子類。
所以你可能會使用pytz這個模塊。通過easy_install可以安裝。目前它的最新文檔在這里。
關於時區使用的幾點想法:
1. 如果你的網站可能有來自其它時區的,可能你要考慮這個問題。都是一個地區的話,還要看伺服器是否與用戶在一個地區,如果不在,也要考慮。
2. 因此,基本上要考慮伺服器時區與用戶時區。伺服器時區可以配置在系統中,全局生效。而用戶時區則與用戶相關,可以由用戶自已進行設置。
3. 在生成相關時間對象時要加入時區的信息,並在輸出時進行合適的轉換。
而pytz提供了創建某個時區對象的方法,如,中國時區:
>>> import pytz
>>> pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']
可以看到,中國的時區可能有:'Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing',最後兩個不知道是什麼。我們可能使用的'Asia/Shanghai'比較多。
因此可以創建一個時區對象:
>>> tz = pytz.timezone('Asia/Shanghai')
然後在創建時間對象時進行指定:
>>> import datetime
>>> datetime.datetime.now(tz)
datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>> datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz)
datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)
>>> datetime.date(2009, 2, 21, tzinfo=tz)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
TypeError: 'tzinfo' is an invalid keyword argument for this function
>>> datetime.time(15, 12, 33, tzinfo=tz)
datetime.time(15, 12, 33, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)
從上面可以看出now(), datetime(), time()都是可以指定tzinfo信息的,而date是不行的,不知道為什麼。所以最好的方法是內部使用datetime對象,需要時進行時區轉換,然後再輸出。
時區轉換:
>>> utc = pytz.utc
>>> n = datetime.datetime.now(tz)
>>> n
datetime.datetime(2009, 2, 21, 15, 16, 41, 843000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>> new = n.astimezone(utc)
>>> new
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=<UTC>)
>>> utc.normalize(n.astimezone(utc))
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=<UTC>)