Python 日期字符串转换为类似 apache 的日期格式

标签 python datetime

简单的问题。我有一个格式如下的字符串:

2012-04-30 23:59:01 EDT

我想将其转换为符合 apache 日志的日期格式:

[30/Apr/2012:23:59:01 +0300]

我非常确定以下代码(使用日期时间)可以工作:

time0 = '2012-04-30 23:59:01 EDT'
time1 = datetime.strptime(time0,'%Y-%m-%d %H:%M:%S %Z')
time2 = datetime.strftime(time1,'[%d/%b/%Y:%H:%M:%S %z]')

但是如果我打印上面的三个变量,time1time2的内容并不符合预期。更具体地说,EDT 似乎没有被正确解析。

time0 = 2012-04-30 23:59:01 EDT
time1 = 2012-04-30 23:59:01
time2 = [30/Apr/2012:23:59:01 ]

最佳答案

Python 的 datetime(尤其是 strptime)因时区问题而臭名昭著。您通常需要使用另一个库(例如 pytz 或类似的库)加载时区信息。

如果可以的话,请使用python-dateutil用于日期解析。我认为它要容易得多,并且内置了所有时区和 DST 内容。

from dateutil import parser
time1 = parser.parse('2012-04-30 23:59:01 EDT', tzinfos={'EDT' : +18000})
datetime.strftime(time1,'[%d/%b/%Y:%H:%M:%S %z]')

关于Python 日期字符串转换为类似 apache 的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914633/

相关文章:

mysql - DATETIME 默认值 0 MYSQL 5.5.25

python - 根据最接近的日期时间合并两个数据框

python - 将 float 分隔成数字

python - 使用 python 和 sqlite3 时出错

c# - Swift:将 NSDate 转换为 C# ticks

mysql - JPA、Glassfish、Mysql : UTC time conversion occuring twice

java - 如何在 Java 中使用 AM/PM 获取时间戳

python - Groupby cumsum 设置为零并在值低于零时重新启动 cumsum

python - Django - get() 返回多个 <entity> - 它返回 5

python - 如何使用一个模型中间层的输出作为另一个模型的输入?