使用Python将包含复杂日期值的字符串转换为日期

时间:2015-04-13 08:38:06

标签: python mysql date

我有一个带有列的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"

4 个答案:

答案 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版本。