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

使用Python将包含复杂日期值的字符串转换为日期,python,mysql,date,Python,Mysql,Date,我有一个SQL表,带有一列,每行包含一个字符串值,如下所示: Fri, 31 Oct 2014 01:51:22 +0000 如何使用Python将其转换为正常的d-m-Y日期?如果不可能,我可以在MySQL中完成吗?我尝试使用PHPMyAdmin数据转换功能,但它没有将其识别为日期 编辑,尝试这样做,我得到一个空值作为回报 SELECT str_to_date(`date_created`, 'DD-MM-YYYY') FROM `orders` WHERE id = "1" 我不确定这是

我有一个SQL表,带有一列,每行包含一个字符串值,如下所示:

Fri, 31 Oct 2014 01:51:22 +0000
如何使用Python将其转换为正常的d-m-Y日期?如果不可能,我可以在MySQL中完成吗?我尝试使用PHPMyAdmin数据转换功能,但它没有将其识别为日期

编辑,尝试这样做,我得到一个空值作为回报

SELECT str_to_date(`date_created`, 'DD-MM-YYYY') FROM `orders` WHERE id = "1"

我不确定这是否是最优雅的解决方案,但这应该是可行的:

datestring = "Fri, 31 Oct 2014 01:51:22 +0000"
(dump, day, month, year, dump, dump) = datestring.split()

您可以忽略转储,日期、月份和年份将包含日期的相应元素。

我不确定这是否是最优雅的解决方案,但这应该可以:

datestring = "Fri, 31 Oct 2014 01:51:22 +0000"
(dump, day, month, year, dump, dump) = datestring.split()

您可以简单地忽略转储,日期、月份和年份将包含日期的相应元素。

因为您已经有了日期数据,我认为您可以像这样简单地将其转换为dd-mm-yyy格式的日期

>>> str = "Fri, 31 Oct 2014 01:51:22 +0000"
>>> str = str [5:16]
>>> str.replace(" ","-")
'31-Oct-2014'

希望这就是您想要的。

既然您已经有了日期数据,我想您可以像这样简单地将其转换为dd-mm-yyy格式的日期

>>> str = "Fri, 31 Oct 2014 01:51:22 +0000"
>>> str = str [5:16]
>>> str.replace(" ","-")
'31-Oct-2014'

希望这就是您想要的。

您可以先将字符串转换为
struct\u 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版本。

您可以先将字符串转换为
struct\u 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版本。

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> 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解决方案

>>> 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> 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)
请参阅

>>> 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> 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)

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> 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解决方案

>>> 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> 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)
请参阅

>>> 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> 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中选择该值?也许您可以使用MySQL日期函数对其进行转换。@OP:MySQL表列的数据类型是什么?@Tichodroma用我尝试过的SELECT语句更新了我的帖子。数据类型为文本。如何从MySQL中选择此值?也许您可以使用MySQL日期函数对其进行转换。@OP:MySQL表列的数据类型是什么?@Tichodroma用我尝试过的SELECT语句更新了我的帖子。数据类型为Text。是否执行了此操作
str.replace(“,“-”)
。它应该会起作用。如果没有,请发布您实现的代码。您是否执行了此
str.replace(“,“-”)
。它应该会起作用。如果没有,请发布您实现的代码。