我有一个带有列的SQL表,每行包含一个字符串值,例如:
Fri, 31 Oct 2014 01:51:22 +0000
如何使用Python将其转换为普通的d-m-Y日期?如果不可能,我可以在MySQL中做到吗?我尝试使用PHPMyAdmin数据转换功能,但它没有将其识别为日期。
编辑,试图这样做,我得到一个Null值作为回报。
SELECT str_to_date(`date_created`, 'DD-MM-YYYY') FROM `orders` WHERE id = "1"
答案 0 :(得分:4)
Python解决方案:
>>> from datetime import datetime
>>> date_string = 'Fri, 31 Oct 2014 01:51:22 +0000'
>>> format_string = '%a, %d %b %Y %I:%M:%S %z'
>>>
>>> date_object = datetime.strptime(date_string, format_string)
>>> date_object
datetime.datetime(2014, 10, 31, 1, 51, 22, tzinfo=datetime.timezone.utc)
>>> date_object.strftime("%d-%m-%Y")
'31-10-2014'
>>>
MySQL解决方案:
mysql> set @date_string := 'Fri, 31 Oct 2014 01:51:22 +0000';
Query OK, 0 rows affected (0.00 sec)
mysql> set @format_string = '%a, %d %b %Y %I:%i:%S %x';
Query OK, 0 rows affected (0.00 sec)
mysql> select @dt:=str_to_date( @date_string, @format_string ) as dt,
-> date_format( @dt, '%d-%m-%Y' ) as ddmmyy;
+---------------------+------------+
| dt | ddmmyy |
+---------------------+------------+
| 2014-10-31 01:51:22 | 31-10-2014 |
+---------------------+------------+
1 row in set, 1 warning (0.00 sec)
警告必须在时区上,因为无法识别格式。
mysql> show warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1292
Message: Truncated incorrect datetime value: 'Fri, 31 Oct 2014 01:51:22 +0000'
1 row in set (0.00 sec)
请参阅:
答案 1 :(得分:1)
由于您已经拥有日期数据,我认为您可以像这样轻松地将其转换为dd-mm-yyy格式日期
>>> str = "Fri, 31 Oct 2014 01:51:22 +0000"
>>> str = str [5:16]
>>> str.replace(" ","-")
'31-Oct-2014'
希望这就是你要找的东西。
答案 2 :(得分:0)
我不确定这是否是最优雅的解决方案,但这应该有效:
datestring = "Fri, 31 Oct 2014 01:51:22 +0000"
(dump, day, month, year, dump, dump) = datestring.split()
您可以简单地忽略转储和日,月和年将包含日期的相应元素
答案 3 :(得分:0)
您可以先将字符串转换为struct_time
,然后以您想要的方式格式化
>>> import time
>>> time.strptime('Fri, 31 Oct 2014 01:51:22 +0000','%a, %d %b %Y %H:%M:%S +0000')
time.struct_time(tm_year=2014, tm_mon=10, tm_mday=31, tm_hour=1, tm_min=51, tm_sec=22, tm_wday=4, tm_yday=304, tm_isdst=-1)
此外,您可以在时区的格式字符串中使用%z
,但这可能不适用于所有平台\ Python版本。