之前在爬取后跨境电商平台的数据时,采集的时间需要进行数据清洗,但是由于时间格式多样性,就需要采用修改时区的方式对时间进行格式化处理!
常见的格式如下:
美国时区:
June 11, 2021
德国时区:
19. Dezember 2020
英国时区:
05 March 2021
除了以上三种格式还会有其他时间格式!
设置时区
如果在设置时区过程中出现以下错误:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "us")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/Python-3.6/lib/python3.6/locale.py", line 598, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
以上这种错误很可能是你用了一种系统不支持的语言。查看系统当前可用语言:
locale -a
查询出可用的语言,然后针对性的设置到脚本中,上面分异常修复后的结果为:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "en_US")
'en_US'
如果的德国的那么就可以采用:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "de_DE")
'de_DE'
时间格式实例
- 1.美国时间
>>> from datetime import datetime
>>> date = 'June 11, 2021'
>>> date_str = datetime.strptime(date, '%B %d, %Y').strftime('%Y-%m-%d')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'June 11, 2021' does not match format '%B %d, %Y'
在没有设置时区的情况下,格式化时间会出错!
解决方案
格式化前先设置好时区:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "en_US")
'en_US'
>>> date = 'June 11, 2021'
>>> date_str = datetime.strptime(date, '%B %d, %Y').strftime('%Y-%m-%d')
>>> date_str
'2021-06-11'
- 2.德国时间
>>> from datetime import datetime
>>> date = '19. Dezember 2020'
>>> date_str = datetime.strptime(date, '%d. %B %Y').strftime('%Y-%m-%d')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'June 11, 2021' does not match format '%d. %B %Y'
在没有设置时区的情况下,格式化时间会出错!
解决方案
格式化前先设置好时区:
>>> date = '19. Dezember 2020'
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "de_DE")
'de_DE'
>>> date_str = datetime.strptime(date, '%d. %B %Y').strftime('%Y-%m-%d')
>>> date_str
'2020-12-19'
时间格式化参数
参数 | 含义 |
---|---|
%H | 小时(以00-23来表示) |
%I | 小时(以01-12来表示)。 |
%K | 小时(以0-23来表示)。 |
%l | 小时(以0-12来表示)。 |
%M | 分钟(以00-59来表示)。 |
%P | AM或PM。 |
%r | 时间(含时分秒,小时以12小时AM/PM来表示)。 |
%s | 总秒数。起算时间为1970-01-01 00:00:00 UTC。 |
%S | 秒(以本地的惯用法来表示)。 |
%T | 时间(含时分秒,小时以24小时制来表示)。 |
%X | 时间(以本地的惯用法来表示)。 |
%Z | 市区。 |
%a | 星期的缩写。 |
%A | 星期的完整名称。 |
%b | 月份英文名的缩写。 |
%B | 月份的完整英文名称。 |
%c | 日期与时间。只输入date指令也会显示同样的结果。 |
%d | 日期(以01-31来表示)。 |
%D | 日期(含年月日)。 |
%j | 该年中的第几天。 |
%m | 月份(以01-12来表示)。 |
%U | 该年中的周数。 |
%w | 该周的天数,0代表周日,1代表周一,异词类推。 |
%x | 日期(以本地的惯用法来表示)。 |
%y | 年份(以00-99来表示)。 |
%Y | 年份(以四位数来表示)。 |
%n | 在显示时,插入新的一行。 |
%t | 在显示时,插入tab。 |
MM | 月份(必要)。 |
DD | 日期(必要)。 |
hh | 小时(必要)。 |
mm | 分钟(必要)。 |
CC | 年份的前两位数(选择性)。 |
YY | 年份的后两位数(选择性)。 |
ss | 秒(选择性)。 |
-d<字符串> | 显示字符串所指的日期与时间。字符串前后必须加上双引号。 |
-s<字符串> | 根据字符串来设置日期与时间。字符串前后必须加上双引号。 |
-u | 显示GMT。 |
–help | 在线帮助。 |
–version | 显示版本信息。 |