1.把字符串转换为datetime
from datetime import datetime begin_date = datetime.strptime("2013-07-01",'%Y-%m-%d')
2.把当前时间转换为0点0分:
from datetime import datetime now = datetime.now() now.strftime("%Y-%m-%dT00:00:00Z")
输出: '2013-07-29T00:00:00Z'
3. 日期差,比如获取1小时以前的日期
import datetime m = datetime.datetime.now() print m + datetime.timedelta(hours=1) print m - datetime.timedelta(minutes=10)
Python关于时间日期有两个库datetime和time,于是我们要在四种格式之间转换:
datetime.datetime对象 datetime.datetime.now()
time.struct_time对象 time.localtime()
字符串 "2010-12-04T10:30:53"
时间戳 1291433453 (一般我们不关心微秒)
列一下它们的转换方法:
dt = datetime.datetime(2010, 12, 4, 10, 30, 53) dt = datetime.datetime.strptime("2010-12-04T10:30:53", "%Y-%m-%dT%H:%M:%S") dt.strftime("%Y-%m-%dT%H:%M:%S") -> "2010-12-04T10:30:53" 或者 dt.isoformat().split(".").pop(0) -> "2010-12-04T10:30:53" dt = datetime.datetime.fromtimestamp(1291433453) (?) dt -> 1291433453 t = time.localtime(1291433453) t = dt.timetuple() t = time.strptime("2010-12-04T10:30:53", "%Y-%m-%dT%H:%M:%S") t.strftime("%Y-%m-%dT%H:%M:%S") -> "2010-12-04T10:30:53" long( time.mktime(t) ) -> 1291433453 (?) t -> dt
可以看出,Python没有提供直接的time.struct_time对象到datetime.datetime对象的转换,也没有直接提供datetime.datetime对象到时间戳的转换。另外,Python的两个strftime ,strptime中都没有时间戳的格式化符号。
对time.struct_time对象到datetime.datetime对象的转换,很容易想到通过字符串形式过渡一下:
dt = datetime.datetime.strptime(t.strftime("%Y-%m-%dT%H:%M:%S"), "%Y-%m-%dT%H:%M:%S")
格式化:
import datetime now = datetime.datetime.now() now.strftime("%y%m") now.strftime("%H-%M-%S")
format:
%a | Locale’s abbreviated weekday name. | |
%A | Locale’s full weekday name. | |
%b | Locale’s abbreviated month name. | |
%B | Locale’s full month name. | |
%c | Locale’s appropriate date and time representation. | |
%d | Day of the month as a decimal number [01,31]. | |
%H | Hour (24-hour clock) as a decimal number [00,23]. | |
%I | Hour (12-hour clock) as a decimal number [01,12]. | |
%j | Day of the year as a decimal number [001,366]. | |
%m | Month as a decimal number [01,12]. | |
%M | Minute as a decimal number [00,59]. | |
%p | Locale’s equivalent of either AM or PM. | (1) |
%S | Second as a decimal number [00,61]. | (2) |
%U | Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. | (3) |
%w | Weekday as a decimal number [0(Sunday),6]. | |
%W | Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. | (3) |
%x | Locale’s appropriate date representation. | |
%X | Locale’s appropriate time representation. | |
%y | Year without century as a decimal number [00,99]. | |
%Y | Year with century as a decimal number. | |
%Z | Time zone name (no characters if no time zone exists). | |
%% | A literal '%' character. |
python的日期和java日期转换
本来想通过long类型来处理,没想到python和java有点不同:
python
>>> time.time()
1349153802.826779
>>> datetime.fromtimestamp(1349153802)
datetime.datetime(2012, 10, 2, 12, 56, 42)
Date date = new Date(1349153802000l);
System.out.println(date.getTime());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.print(df.format(date));