python_常用日期及转换

1
2
from datetime import date, datetime, timedelta
import pandas as pd

datetime_module

获取当前日期、时间

  • 详细时间
  • 简单时间
1
2
3
4
5
6
7
8
9
t = datetime.now()
t
type(t)
t.year
t.month
t.day
t.hour
t.minute
t.second

Output:

1
2
3
4
5
6
7
8
datetime.datetime(2022, 4, 5, 0, 41, 14, 961976)
datetime.datetime
2022
4
5
0
41
14
1
2
3
4
5
t = date.today()
t
t.year
t.month
t.day

Output:

1
2
3
4
datetime.date(2022, 4, 5)
2022
4
5

日期转星期

  • weekday Monday == 0 … Sunday == 6
  • isoweekday Monday == 1 … Sunday == 7
1
2
3
4
5
t = date.today()
datetime.isoweekday(t)

t = datetime.now()
datetime.weekday(t)

Output:

1
2
2
1
1
2
t = date(2022, 4, 4)
datetime.isoweekday(t)

Output:

1
1

字符串转与datetime格式转化

  • strptime() 传入 '2022/4/4' 斜杠的格式 >>>>>>datetime.datetime
  • datetime() 传入整型 年,月,日,时,分,秒 >>>>>> datetime.datetime
  • .strftime() 传入格式如 '%Y%m%d' 或者 '%Y-%m-%d' >>>>>>str
  • f-string方法,f'{datetime:'%Y%m%d'} >>>>>>>>>>>>str
    • 这种方法快捷,而且相当灵活,用法多样
    • %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 当前时区的名称
1
2
3
4
5
6
7
8
9
td = datetime.strptime('2022/4/4', '%Y/%m/%d')
type(td)

t = datetime(2022, 4, 4, 0, 0, 0)
type(t)

t.strftime('%Y%m%d')
t.strftime('%Y-%m-%d')
f'{t:%Y-%m-%d}'

Output:

1
2
3
4
5
datetime.datetime
datetime.datetime
'20220404'
'2022-04-04'
'2022-04-04'
1
2
3
4
5
6
7
8
t = datetime.now()
f'{t:%y}, {t:%Y}, {t:%m}, {t:%d}, {t:%H}, {t:%M}, {t:%S}'
f'{t:%a}, {t:%A}, {t:%b}, {t:%B}'
f'{t:%c}'
f'{t:%j}, {t:%p}'
f'{t:%U}, {t:%W}'
f'{t:%w}, {t:%x}, {t:%X}'
f'{t:%Z}'

Output:

1
2
3
4
5
6
7
'22,  2022,  04,  05,  00,  41,  15'
'Tue, Tuesday, Apr, April'
'Tue Apr 5 00:41:15 2022'
'095, AM'
'14, 14'
'2, 04/05/22, 00:41:15'
''
1
2
datetime.max
datetime.min

Output:

1
2
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
datetime.datetime(1, 1, 1, 0, 0)
1
2
t = datetime.now()
datetime.timestamp(t)

Output:

1
1649090475.069974

pandas_module中的时间函数

  • pd.date_range() 列出期间的所有日期

    • Returns rng : DatetimeIndex
    • Of the four parameters start, end, periods, and freq,exactly three must be specified. If freq is omitted, the resulting,DatetimeIndex will have periods linearly spaced elements between start and end (closed on both sides).
    • start : str or datetime-like, optional, Left bound for generating dates.
    • end : str or datetime-like, optional, Right bound for generating dates.
    • periods : int, optional, Number of periods to generate.
    • freq : str or DateOffset, default ‘D’, Frequency strings can have multiples, e.g. ‘5H’. See
      :ref:here <timeseries.offset_aliases> for a list of frequency aliases.
  • pd.period_range()

    • Of the three parameters: start, end, and periods, exactly two must be specified.
    • start : str or period-like, default None,Left bound for generating periods.
    • end : str or period-like, default None,Right bound for generating periods.
    • periods : int, default None,Number of periods to generate.
    • freq : str or DateOffset, optional,Frequency alias. By default the freq is taken from start or end
      if those are Period objects. Otherwise, the default is "D" fordaily frequency.
    • name : str, default None, Name of the resulting PeriodIndex.must be specified.
  • pd.to_datetime()

  • pd.to_timedelta()

生成日期范围

= pd.date_range

  • pd.period_range
1
2
3
4
5
6
7
pd.date_range('2022-4-1', '2022-4-10')

pd.date_range('2022-4-1', periods=3)
pd.date_range(end='2022-4-1', periods=3)

pd.date_range('2022-4-1', periods=3, freq='M')
pd.date_range('2022-4-1', periods=3, freq='3M')

Output:

1
2
3
4
5
6
7
8
9
10
11
12
13
DatetimeIndex(['2022-04-01', '2022-04-02', '2022-04-03', '2022-04-04',
'2022-04-05', '2022-04-06', '2022-04-07', '2022-04-08',
'2022-04-09', '2022-04-10'],
dtype='datetime64[ns]', freq='D')


DatetimeIndex(['2022-04-01', '2022-04-02', '2022-04-03'], dtype='datetime64[ns]', freq='D')

DatetimeIndex(['2022-03-30', '2022-03-31', '2022-04-01'], dtype='datetime64[ns]', freq='D')

DatetimeIndex(['2022-04-30', '2022-05-31', '2022-06-30'], dtype='datetime64[ns]', freq='M')

DatetimeIndex(['2022-04-30', '2022-07-31', '2022-10-31'], dtype='datetime64[ns]', freq='3M')
1
2
pd.period_range('2022-4-13', '2022-8-1', freq='M')
pd.period_range('2022Q1', periods=3, freq='Q')

Output:

1
2
3
PeriodIndex(['2022-04', '2022-05', '2022-06', '2022-07', '2022-08'], dtype='period[M]')

PeriodIndex(['2022Q1', '2022Q2', '2022Q3'], dtype='period[Q-DEC]')

转换格式

  • datetime64[ns]
1
2
3
4
5
6
7
8
9
10
pd.to_datetime("2022-4-5")

pd.to_datetime(["2022-4-5", "2022-5-5"])
pd.to_datetime([1, 2, 3], unit='D', origin=pd.Timestamp('2022-05-21'))

pd.to_datetime([
'2018-10-26 12:00',
'2018-10-26 12:00 -0530',
datetime(2020, 1, 1, 18),
])

Output:

1
2
3
4
5
6
7
Timestamp('2022-04-05 00:00:00')

DatetimeIndex(['2022-04-05', '2022-05-05'], dtype='datetime64[ns]', freq=None)

DatetimeIndex(['2022-05-22', '2022-05-23', '2022-05-24'], dtype='datetime64[ns]', freq=None)

Index([2018-10-26 12:00:00, 2018-10-26 12:00:00-05:30, 2020-01-01 18:00:00], dtype='object')