获取当前时间:
python代码
import time
print time.time() #获取当前时间
print time.strftime(“%y-%m-%d %x “) #获取当前时间(按照指定格式)
用time.localtime()方法,作用是格式化时间戳为本地的时间:
python代码
import time
print time.localtime(time.time())
输出结果:time.struct_time(tm_year=2015, tm_mon=11, tm_mday=513, tm_hour=15, tm_min=48, tm_sec=28, tm_wday=3, tm_yday=309, tm_isdst=0)
现在看起来更有希望格式成我们想要的时间了。time.strftime(‘%y-%m-%d’,time.localtime(time.time()))
python代码
import time
print time.strftime(‘%y-%m-%d’,time.localtime(time.time()))
最后用time.strftime()方法,把刚才的一大串信息格式化成我们想要的东西,现在的结果是:2015-11-05
ime.strftime里面有很多参数,可以让你能够更随意的输出自己想要的东西:下面是time.strftime的参数:
strftime(format[, tuple]) -> string将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
1,python中时间日期格式化符号:
%y 两位数的年份表示(00-99)%y 四位数的年份表示(000-9999)%m 月份(01-12)%d 月内中的一天(0-31)%h 24小时制小时数(0-23)%i 12小时制小时数(01-12) %m 分钟数(00=59)%s 秒(00-59)%a 本地简化星期名称%a 本地完整星期名称%b 本地简化的月份名称%b 本地完整的月份名称%c 本地相应的日期表示和时间表示%j 年内的一天(001-366)%p 本地a.m.或p.m.的等价符%u 一年中的星期数(00-53)星期天为星期的开始%w 星期(0-6),星期天为星期的开始%w 一年中的星期数(00-53)星期一为星期的开始%x 本地相应的日期表示%x 本地相应的时间表示%z 当前时区的名称%% %号本身
2. 计算时间差:
python代码
#coding=utf-8
import time
import datetime
d1 = datetime.datetime(2013,6,9)
d2 = datetime.datetime(2015, 11,5)
print (d1 – d2).days
输出结果是:879
3.计算运行时间差:
python代码
#coding=utf-8
import time
import datetime
starttime = datetime.datetime.now()
time.sleep(3)
endtime = datetime.datetime.now()
print (endtime – starttime).seconds
输出结果是:3
4,计算十天后的日期时间:
python代码
#coding=utf-8
import time
import datetime
d1 = datetime.datetime.now()
d3 = d1 + datetime.timedelta(days =10)
print str(d3)
print d3.ctime()
输出结果:
2015-11-15 14:44:04.291000sun nov 15 14:44:04 2015
5,阳历转阴历
#! -*- encoding: gbk -*-
import re
import math
import time
import os
month_name = [“”, “january”, “february”, “march”, “april”, “may”, “june”, “july”, “august”, “september”, “october”, “november”, “december”]
month_days = [0,31,28,31,30,31,30,31,31,30,31,30,31];
lunar_calendar_table = [
0x04ae53,0x0a5748,0x5526bd,0x0d2650,0x0d9544,0x46aab9,0x056a4d,0x09ad42,0x24aeb6,0x04ae4a, # //*1901-1910*/
0x6a4dbe,0x0a4d52,0x0d2546,0x5d52ba,0x0b544e,0x0d6a43,0x296d37,0x095b4b,0x749bc1,0x049754, # //*1911-1920*/
0x0a4b48,0x5b25bc,0x06a550,0x06d445,0x4adab8,0x02b64d,0x095742,0x2497b7,0x04974a,0x664b3e, # //*1921-1930*/
0x0d4a51,0x0ea546,0x56d4ba,0x05ad4e,0x02b644,0x393738,0x092e4b,0x7c96bf,0x0c9553,0x0d4a48, # //*1931-1940*/
0x6da53b,0x0b554f,0x056a45,0x4aadb9,0x025d4d,0x092d42,0x2c95b6,0x0a954a,0x7b4abd,0x06ca51, # //*1941-1950*/
0x0b5546,0x555abb,0x04da4e,0x0a5b43,0x352bb8,0x052b4c,0x8a953f,0x0e9552,0x06aa48,0x6ad53c, # //*1951-1960*/
0x0ab54f,0x04b645,0x4a5739,0x0a574d,0x052642,0x3e9335,0x0d9549,0x75aabe,0x056a51,0x096d46, # //*1961-1970*/
0x54aebb,0x04ad4f,0x0a4d43,0x4d26b7,0x0d254b,0x8d52bf,0x0b5452,0x0b6a47,0x696d3c,0x095b50, # //*1971-1980*/
0x049b45,0x4a4bb9,0x0a4b4d,0xab25c2,0x06a554,0x06d449,0x6ada3d,0x0ab651,0x093746,0x5497bb, # //*1981-1990*/
0x04974f,0x064b44,0x36a537,0x0ea54a,0x86b2bf,0x05ac53,0x0ab647,0x5936bc,0x092e50,0x0c9645, # //*1991-2000*/
0x4d4ab8,0x0d4a4c,0x0da541,0x25aab6,0x056a49,0x7aadbd,0x025d52,0x092d47,0x5c95ba,0x0a954e, # //*2001-2010*/
0x0b4a43,0x4b5537,0x0ad54a,0x955abf,0x04ba53,0x0a5b48,0x652bbc,0x052b50,0x0a9345,0x474ab9, # //*2011-2020*/
0x06aa4c,0x0ad541,0x24dab6,0x04b64a,0x69573d,0x0a4e51,0x0d2646,0x5e933a,0x0d534d,0x05aa43, # //*2021-2030*/
0x36b537,0x096d4b,0xb4aebf,0x04ad53,0x0a4d48,0x6d25bc,0x0d254f,0x0d5244,0x5daa38,0x0b5a4c, # //*2031-2040*/
0x056d41,0x24adb6,0x049b4a,0x7a4bbe,0x0a4b51,0x0aa546,0x5b52ba,0x06d24e,0x0ada42,0x355b37, # //*2041-2050*/
0x09374b,0x8497c1,0x049753,0x064b48,0x66a53c,0x0ea54f,0x06b244,0x4ab638,0x0aae4c,0x092e42, # //*2051-2060*/
0x3c9735,0x0c9649,0x7d4abd,0x0d4a51,0x0da545,0x55aaba,0x056a4e,0x0a6d43,0x452eb7,0x052d4b, # //*2061-2070*/
0x8a95bf,0x0a9553,0x0b4a47,0x6b553b,0x0ad54f,0x055a45,0x4a5d38,0x0a5b4c,0x052b42,0x3a93b6, # //*2071-2080*/
0x069349,0x7729bd,0x06aa51,0x0ad546,0x54daba,0x04b64e,0x0a5743,0x452738,0x0d264a,0x8e933e, # //*2081-2090*/
0x0d5252,0x0daa47,0x66b53b,0x056d4f,0x04ae45,0x4a4eb9,0x0a4d4c,0x0d1541,0x2d92b5 # //*2091-2099*/
]
# 下面的三个表格是农历数据表 lunarcalendartable 的结构。总共使用了32位整数的0~23位。
#
# 6 5 4 3 2 1 0
# 表示春节的公历月份 表示春节的公历日期
#
# 19 18 17 16 15 14 13 12 11 10 9 8 7
# 1 2 3 4 5 6 7 8 9 10 11 12 13
# 农历1-13 月大小 。月份对应位为1,农历月大(30 天),为0 表示小(29 天)
#
# 23 22 21 20
# 表示当年闰月月份,值为0 为则表示当年无闰月。
def get_month_days(year, month):
global month_days;
if(month==2):
if(((year%4 == 0) and (year%100 != 0)) or (year%400 == 0)):
return 29
else:
return 28
else:
return(month_days[month]);
def get_syear_days(syear):
if(((syear%4 == 0) and (syear%100 != 0)) or (syear%400 == 0)):
return 366
else:
return 365
def get_days_of_syear(syear, smonth, sday):
“”” get given day’s number of sun year “””
days = 0
for i in range(1, smonth):
days += get_month_days(syear, i)
days += sday
return days
def get_days_of_lyear(syear, smonth, sday):
“”” get given day’s number of the lunar year “””
global lunar_calendar_table
lyear = syear
spring_month = (lunar_calendar_table[syear-1901] & 0x60) >> 5
spring_day = (lunar_calendar_table[syear-1901] & 0x1f)
if ((spring_month > smonth) or ((spring_month == smonth) and (spring_day > sday))):
# the day is before spring festival day, and is previous day in lunar year
spring_month = (lunar_calendar_table[syear-1901 – 1] & 0x60) >> 5
spring_day = (lunar_calendar_table[syear-1901 – 1] & 0x1f)
lyear -= 1
lunar_days = get_syear_days(lyear) + get_days_of_syear(syear, smonth, sday) \
– get_days_of_syear(lyear, spring_month, spring_day)
else:
lunar_days = get_days_of_syear(syear, smonth, sday) \
– get_days_of_syear(syear, spring_month, spring_day)
lunar_days += 1 # consider current day
return (lyear, lunar_days)
def get_lunar_date(syear, smonth, sday):
if syear < 1901 or syear > 2099:
return
# lunar year, lunar days to spring festival
lyear, lunar_days = get_days_of_lyear(syear, smonth, sday);
l_double_month = (lunar_calendar_table[lyear-1901] >> 20 ) & 0xf
lmonth = lday = 1
bits = 19
month_begin_day = 0
for lmonth in range(1, 14):
l_month_big = (lunar_calendar_table[lyear-1901] >> bits) & 0x1
if month_begin_day + 29 + l_month_big < lunar_days:
lmonth += 1
month_begin_day += 29 + l_month_big
else:
lday = lunar_days - month_begin_day
break
bits -= 1
if l_double_month:
# lunar double month adjust
if l_double_month == lmonth - 1:
lmonth -= 1
lmonth += 100 # double month
elif l_double_month < lmonth - 1:
lmonth -= 1
return (lyear, lmonth, lday)
if __name__ == "__main__":
y,m,d = 2010, 9, 28
print "sun calendar 2010-9-28 == lunar calendar ", get_lunar_date(y,m,d)
输出结果:
sun calendar 2010-9-28 == lunar calendar (2010, 8, 21)
python版的农历日历calendar:
#coding=utf-8
#参见:http://download.csdn.net/source/1178
#******************************************************************************
# 下面为阴历计算所需的数据,为节省存储空间,所以采用下面比较变态的存储方法.
#******************************************************************************
#数组g_lunar_month_day存入阴历1901年到2050年每年中的月天数信息,
#阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表30天,否则为29天
g_lunar_month_day = [
0x4ae0, 0xa570, 0x5268, 0xd260, 0xd950, 0x6aa8, 0x56a0, 0x9ad0, 0x4ae8, 0x4ae0, #1910
0xa4d8, 0xa4d0, 0xd250, 0xd548, 0xb550, 0x56a0, 0x96d0, 0x95b0, 0x49b8, 0x49b0, #1920
0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada8, 0x2b60, 0x9570, 0x4978, 0x4970, 0x64b0, #1930
0xd4a0, 0xea50, 0x6d48, 0x5ad0, 0x2b60, 0x9370, 0x92e0, 0xc968, 0xc950, 0xd4a0, #1940
0xda50, 0xb550, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, 0xb4a8, 0x6ca0, #1950
0xb550, 0x55a8, 0x4da0, 0xa5b0, 0x52b8, 0x52b0, 0xa950, 0xe950, 0x6aa0, 0xad50, #1960
0xab50, 0x4b60, 0xa570, 0xa570, 0x5260, 0xe930, 0xd950, 0x5aa8, 0x56a0, 0x96d0, #1970
0x4ae8, 0x4ad0, 0xa4d0, 0xd268, 0xd250, 0xd528, 0xb540, 0xb6a0, 0x96d0, 0x95b0, #1980
0x49b0, 0xa4b8, 0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada0, 0xab60, 0x9370, 0x4978, #1990
0x4970, 0x64b0, 0x6a50, 0xea50, 0x6b28, 0x5ac0, 0xab60, 0x9368, 0x92e0, 0xc960, #2000
0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, #2010
0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, #2020
0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, #2030
0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, #2040
0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0, #2050
]
#数组glanarmonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年
g_lunar_month = [
0x00, 0x50, 0x04, 0x00, 0x20, #1910
0x60, 0x05, 0x00, 0x20, 0x70, #1920
0x05, 0x00, 0x40, 0x02, 0x06, #1930
0x00, 0x50, 0x03, 0x07, 0x00, #1940
0x60, 0x04, 0x00, 0x20, 0x70, #1950
0x05, 0x00, 0x30, 0x80, 0x06, #1960
0x00, 0x40, 0x03, 0x07, 0x00, #1970
0x50, 0x04, 0x08, 0x00, 0x60, #1980
0x04, 0x0a, 0x00, 0x60, 0x05, #1990
0x00, 0x30, 0x80, 0x05, 0x00, #2000
0x40, 0x02, 0x07, 0x00, 0x50, #2010
0x04, 0x09, 0x00, 0x60, 0x04, #2020
0x00, 0x20, 0x60, 0x05, 0x00, #2030
0x30, 0xb0, 0x06, 0x00, 0x50, #2040
0x02, 0x07, 0x00, 0x50, 0x03 #2050
]
#==================================================================================
from datetime import date, datetime
from calendar import calendar as cal
start_year = 1901
def is_leap_year(tm):
y = tm.year
return (not (y % 4)) and (y % 100) or (not (y % 400))
def show_month(tm):
(ly, lm, ld) = get_ludar_date(tm)
print
print u”%d年%d月%d日” % (tm.year, tm.month, tm.day), week_str(tm),
print u”\t农历:”, y_lunar(ly), m_lunar(lm), d_lunar(ld)
print
print u”日\t一\t二\t三\t四\t五\t六”
c = cal()
ds = [d for d in c.itermonthdays(tm.year, tm.month)]
count = 0
for d in ds:
count += 1
if d == 0:
print “\t”,
continue
(ly, lm, ld) = get_ludar_date(datetime(tm.year, tm.month, d))
if count % 7 == 0:
print
d_str = str(d)
if d == tm.day:
d_str = u”*” + d_str
print d_str + d_lunar(ld) + u”\t”,
print
def this_month():
show_month(datetime.now())
def week_str(tm):
a = u’星期一 星期二 星期三 星期四 星期五 星期六 星期日’.split()
return a[tm.weekday()]
def d_lunar(ld):
a = u’初一 初二 初三 初四 初五 初六 初七 初八 初九 初十 十一 十二 十三 十四 十五 十六 十七 十八 十九 廿十 廿一 廿二 廿三 廿四 廿五 廿六 廿七 廿八 廿九 三十’.split()
return a[ld – 1]
def m_lunar(lm):
a = u’正月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月’.split()
return a[lm – 1]
def y_lunar(ly):
y = ly
tg = u’甲 乙 丙 丁 戊 己 庚 辛 壬 癸’.split()
dz = u’子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥’.split()
sx = u’鼠 牛 虎 免 龙 蛇 马 羊 猴 鸡 狗 猪’.split()
return tg[(y – 4) % 10] + dz[(y – 4) % 12] + u’ ‘ + sx[(y – 4) % 12] + u’年’
def date_diff(tm):
return (tm – datetime(1901, 1, 1)).days
def get_leap_month(lunar_year):
flag = g_lunar_month[(lunar_year – start_year) / 2]
if (lunar_year – start_year) % 2:
return flag & 0x0f
else:
return flag >> 4
def lunar_month_days(lunar_year, lunar_month):
if (lunar_year < start_year):
return 30
high, low = 0, 29
ibit = 16 - lunar_month;
if (lunar_month > get_leap_month(lunar_year) and get_leap_month(lunar_year)):
ibit -= 1
if (g_lunar_month_day[lunar_year – start_year] & (1