之前在爬取后跨境电商平台的数据时,采集的时间需要进行数据清洗,但是由于时间格式多样性,就需要采用修改时区的方式对时间进行格式化处理!
常见的格式如下:
美国时区:
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 | 显示版本信息。 |


本文讲述了在处理跨境电商数据时如何应对时间格式多样性的挑战,包括美国、德国和英国时间示例,以及遇到locale设置问题的解决方案。通过设置正确的时区locale,如'en_US'和'de_DE',确保datetime.strptime和strftime的正确执行。





