GVKun编程网logo

Python datetime strptime()和strftime():如何保留时区信息(python datetime.strftime)

12

此处将为大家介绍关于Pythondatetimestrptime的详细内容,并且为您解答有关和strftime的相关问题,此外,我们还将为您介绍关于10000年的datetime.strptime()

此处将为大家介绍关于Python datetime strptime的详细内容,并且为您解答有关和strftime的相关问题,此外,我们还将为您介绍关于10000年的datetime.strptime()转换失败、datetime.datetime.strptime在Python 2.4.1中不存在、datetime.strptime()的Python时区'%z'指令不可用、Django中datetime的处理方法(strftime/strptime)的有用信息。

本文目录一览:

Python datetime strptime()和strftime():如何保留时区信息(python datetime.strftime)

Python datetime strptime()和strftime():如何保留时区信息(python datetime.strftime)

请参见以下代码:

import datetimeimport pytzfmt = ''%Y-%m-%d %H:%M:%S %Z''d = datetime.datetime.now(pytz.timezone("America/New_York"))d_string = d.strftime(fmt)d2 = datetime.datetime.strptime(d_string, fmt)print d_string print d2.strftime(fmt)

输出是

2013-02-07 17:42:31 EST2013-02-07 17:42:31

时区信息只是在翻译中丢失了。

如果我将’%Z’切换为’%z’,我得到

ValueError: ''z'' is a bad directive in format ''%Y-%m-%d %H:%M:%S %z''

我知道我可以使用python-dateutil,但是我只是发现我无法在日期时间中实现此简单功能而不得不引入更多的依赖关系,这真是不可思议。

答案1

小编典典

这里的部分问题是通常用于表示时区的字符串实际上并不是唯一的。“ EST”对北美的人仅表示“ America /
New_York”。这是C时间API的局限性,Python解决方案是……如果有人愿意编写PEP,则可以在将来的任何将来的版本中添加完整的tz功能。

可以 格式化和解析时区作为偏移量,但是会丢失夏令时/夏令时信息(例如,夏天无法区分“ America / Phoenix”和“ America /
Los_Angeles”)。您可以将时区格式设置为3个字母的缩写,但不能从中解析回。

如果您想要一些模糊,模棱两可的东西,但通常是您想要的东西,则需要一个第三方库,例如dateutil

如果您想要真正明确的内容,只需自己将实际的tz名称附加到本地datetime字符串,然后在另一端将其拆分即可:

d = datetime.datetime.now(pytz.timezone("America/New_York"))dtz_string = d.strftime(fmt) + '' '' + "America/New_York"d_string, tz_string = dtz_string.rsplit('' '', 1)d2 = datetime.datetime.strptime(d_string, fmt)tz2 = pytz.timezone(tz_string)print dtz_string print d2.strftime(fmt) + '' '' + tz_string

或者……在这两者之间的中间位置,您已经在使用该pytz库,该库可以解析(根据某些任意但定义明确的歧义消除规则)“
EST”之类的格式。因此,如果您确实愿意,可以将%Zin留在格式方面,然后将其拉下并进行解析,pytz.timezone()然后再将其余部分传递给strptime

10000年的datetime.strptime()转换失败

10000年的datetime.strptime()转换失败

根据docs,仅支持4位数字的年份。

年份受1989 C标准限制。

,

%Y表示4位数字的年份,该模式不匹配最后一个0。您无法使用python datetime处理超过9999年的年份:https://docs.python.org/3/library/datetime.html#datetime.MAXYEAR

,

感谢您的回复 看到错误时,我也这么想。 我还是专家,因为我仍然是python的新秀。

datetime.datetime.strptime在Python 2.4.1中不存在

datetime.datetime.strptime在Python 2.4.1中不存在

在某些情况下,我们的团队需要使用Python 2.4.1。在Python
2.4.1strptime中的datetime.datetime模块中不存在:

Python 2.4.1 (#65,Mar 30 2005,09:13:57) [MSC v.1310 32 bit (Intel)]
Type "help","copyright","credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.strptime
Traceback (most recent call last):
  File "<string>",line 1,in <fragment>
AttributeError: type object 'datetime.datetime' has no attribute 'strptime'

与2.6相反:

Python 2.6.6 (r266:84297,Aug 24 2010,18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help","credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.strptime
<built-in method strptime of type object at 0x1E1EF898>

键入时,我在2.4.1的时间模块中找到了它:

Python 2.4.1 (#65,09:16:17) [MSC v.1310 32 bit (Intel)]
Type "help","credits" or "license" for more information.
>>> import time
>>> time.strptime
<built-in function strptime>

我认为它strptime在某个时候动了吗?检查这种事情的最好方法是什么。我尝试查看python的发行历史,但找不到任何东西。

datetime.strptime()的Python时区'%z'指令不可用

datetime.strptime()的Python时区'%z'指令不可用

使用datetime.strptime()的’%z’模式

我有一个表示日期的字符串文本,我完全能够解析它并将其转换为干净的datetime对象:

date = "[24/Aug/2014:17:57:26"dt = datetime.strptime(date, "[%d/%b/%Y:%H:%M:%S")

除了无法使用此处指定的
%z模式 捕获带有 时区 的整个日期字符串
__

date_tz = 24/Aug/2014:17:57:26 +0200dt = datetime.strptime(date, "[%d/%b/%Y:%H:%M:%S %z]")>>> ValueError: ''z'' is a bad directive in format ''[%d/%b/%Y:%H:%M:%S %z]''

因为正如这个错误报告所说

每个平台* 都实现了strftime() *

我精确地指出,朴素的tzinfo指令’%Z’没有这样的问题

解决方法:将tzinfo字符串转换为tzinfo对象

通过使用dateutil模块将GST时间格式字符串转换为tzinfo对象[如此处建议] [4]
,然后将tzinfo插入datetime对象,我可以完美地实现以下解决方法

问题:使%z适用于我的平台?

但是由于显然我将需要%z模式来进行进一步的项目,因此我想找到一个避免这种解决方法的解决方案,并使用外部模块来完成此简单任务。你可以建议我阅读一下吗?我以为较新版本的python(我在2.7上)可以处理它,但是我现在不打算为这个小而重要的细节更改版本。

[编辑]

好吧,看到评论让我重新提出了我的问题:如何在不知道语言环境时间的情况下使用strptime()解析电子邮件时区指示符?

答案1

小编典典

strptime()用纯Python实现。不像strftime();
它[支持哪些指令]与平台无关。%z从Python 3.2开始受支持:

>>> from datetime import datetime>>> datetime.strptime(''24/Aug/2014:17:57:26 +0200'', ''%d/%b/%Y:%H:%M:%S %z'')datetime.datetime(2014, 8, 24, 17, 57, 26, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))

如何在不知道语言环境时间的情况下使用strptime()解析电子邮件时区指示符?

Python
2.7中没有具体的时区实现。您可以轻松实现UTC偏移量解析,

Django中datetime的处理方法(strftime/strptime)

Django中datetime的处理方法(strftime/strptime)

strftime<将date,datetime,timezone.now()类型处理转化为字符串类型>

  strftime()函数是用来格式化一个日期、日期时间和时间的函数,支持date、datetime、time等类,把这些时间通过格式字符要求格式为字符串表示。

import datatime
datatime.datatime.now()

或者

from datatime import datatime
datatime.now()

我的输出转化格式

strftime(''%Y-%m-%d %H:%I:%S'')

效果类似于2018-07-02 23:18:20这样.

strptime<将字符串处理转换成期望类型的数据>

  strptime()函数就是从字符串表示的日期时间按格式化字符串要求转换为相应的日期时间。

d2 = datetime.strptime(''2018-03-02 17:41:20'', ''%Y-%m-%d %H:%M:%S'')

转化对照的格式: 

转成字符串

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)  十二小时制
%M 分钟数(00=59)
%S 秒(00-59) 

遇到的两个bug:

一:显示时间和数据库不一致的bug:

  曾经遇到过这样的一个问题,从数据库取出来的时间和前端显示时间不一致的问题.后来经过多出输出时间各处转换的信息,最后发现,因为之前写代码的同事,使用了这样的

one[''time''] = one[''time''].strftime(''%Y-%m-%d %H:%I:%S'')

%I是十二小时制的转换形式.这样转换格式的时候,虽然不会报错,可是输出的结果会和数据库的不一致,数据库是以24小时为单位记录的时间.

二:datetime.datetime(2018, 2, 2, 18, 25, 29, tzinfo=<UTC>) is not JSON serializable

出现这样的错误信息..

datetime.datetime(2018, 2, 2, 18, 25, 29, tzinfo=<UTC>) is not JSON serializable

 这是出现在将datetime数据直接放在json里出现的错误信息.不能直接放在json里.

解决办法是:可以使用strftime进行序列化,如下面的方法

.strftime("%Y-%m-%d %H:%M:%S")

下面看下Python:time, strftime和strptime的具体讲解

最常用的time.time()返回的是一个浮点数,单位为秒。但strftime处理的类型是time.struct_time,实际上是一个tuple。strptime和localtime都会返回这个类型。

>>> import time
>>> t = time.time()
>>> t
1202872416.4920001
>>> type(t)
<type ''float''>
>>> t = time.localtime()
>>> t
(2008, 2, 13, 10, 56, 44, 2, 44, 0)
>>> type(t)
<type ''time.struct_time''>
>>> time.strftime(''%Y-%m-%d'', t)
''2008-02-13''
>>> time.strptime(''2008-02-14'', ''%Y-%m-%d'')
(2008, 2, 14, 0, 0, 0, 3, 45, -1)

以上所述是小编给大家介绍的Django中datetime的处理方法(strftime/strptime),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

您可能感兴趣的文章:
  • Python datetime 如何处理时区信息
  • 分析Python的Django框架的运行方式及处理流程
  • Django中的DateTimeField和DateField实现
  • django 中使用DateTime常用的时间查询方式
  • 如何在Django中添加没有微秒的 DateTimeField 属性详解
  • Django 中的Timezone 处理操作

关于Python datetime strptime和strftime的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于10000年的datetime.strptime()转换失败、datetime.datetime.strptime在Python 2.4.1中不存在、datetime.strptime()的Python时区'%z'指令不可用、Django中datetime的处理方法(strftime/strptime)的相关知识,请在本站寻找。

本文标签: