当前位置: 首页 > 面试题库 >

如何从日期时间对象中删除pytz时区?

拓拔德馨
2023-03-14
问题内容

有没有一种简单的方法可以从pytz日期时间对象中删除时区?
例如dtdt_tz在此示例中进行重构:

>>> import datetime
>>> import pytz
>>> dt = datetime.datetime.now()
>>> dt
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000)
>>> dt_tz = pytz.utc.localize(dt)
>>> dt_tz
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>)

问题答案:

要从日期时间对象中删除时区(tzinfo):

# dt_tz is a datetime.datetime object
dt = dt_tz.replace(tzinfo=None)

如果您使用的是诸如arrow的库,则可以通过简单地将arrow对象转换为datetime对象,然后执行与上述示例相同的操作来删除时区。

# <Arrow [2014-10-09T10:56:09.347444-07:00]>
arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444, tzinfo=tzoffset(None, -25200))
tmpDatetime = arrowObj.datetime

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444)
tmpDatetime = tmpDatetime.replace(tzinfo=None)

你为什么要这样做?一个例子是mysql不支持DATETIME类型的时区。因此,使用ORM之类的sqlalchemy时,只要为datetime.datetime对象提供要插入数据库中的对象,它就会删除时区。解决方案是将datetime.datetime对象转换为UTC(由于无法指定时区,因此数据库中的所有内容均为UTC),然后将其插入数据库(无论如何都删除了时区),也可以自行删除。还要注意,您
不能 比较datetime.datetime其中一个是时区感知而另一个是时区幼稚的对象。

##############################################################################
# MySQL example! where MySQL doesn't support timezones with its DATETIME type!
##############################################################################

arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

arrowDt = arrowObj.to("utc").datetime

# inserts datetime.datetime(2014, 10, 9, 17, 56, 9, 347444, tzinfo=tzutc())
insertIntoMysqlDatabase(arrowDt)

# returns datetime.datetime(2014, 10, 9, 17, 56, 9, 347444)
dbDatetimeNoTz = getFromMysqlDatabase()

# cannot compare timzeone aware and timezone naive
dbDatetimeNoTz == arrowDt # False, or TypeError on python versions before 3.3

# compare datetimes that are both aware or both naive work however
dbDatetimeNoTz == arrowDt.replace(tzinfo=None) # True


 类似资料:
  • 问题内容: 我有一个大多数时间正确的数据库,但是有一些像这样坏了: 没有无效的年份,这对我有用: 但是,一旦我用无效的年份击中一个对象,我就会得到,这很好,但是我不确定如何最好地去除不良字符。它们的范围是2到6 。 有指针吗?我只想切片,但我希望有一个日期时间安全的策略。 问题答案: 是的,我会砍掉多余的数字。假设它们总是附加在日期字符串上,则可以这样进行: 我打算尝试从异常中获取多余的位数,但是

  • 问题内容: 我想从对象中删除时间。 但是,当我转换此日期(格式)时,它也在附加时间。 我根本不想要时间。我想要的只是“ 21/03/2012”。 问题答案: 快速答案是: 不,您不能这样做。 因为那是用来干什么的。 来自的javadoc : Date类表示特定的时间瞬间,精度为毫秒。 但是 ,由于此类仅是数据对象。它不在乎我们如何描述它。当我们看到日期时,可以说是,这就是您所需要的。有很多方法可以

  • 问题内容: 我有一个日期字符串,想要将其转换为日期类型: 我尝试将datetime.datetime.strptime与所需的格式一起使用,但它会返回转换时间。 这是输出返回的内容: 我需要删除时间:00:00:00。 问题答案: 您想要的是datetime.date对象。您拥有的是一个datetime.datetime对象。您可以按照以上说明进行打印时更改对象,或者在创建对象时执行以下操作:

  • 问题内容: 上面的代码将20分钟添加到StartTimeDate。有什么好方法可以删除那些20分钟未添加的内容?试图找到一种解决方案,但没有找到解决方案。有任何想法吗? 问题答案: 您没有任何特定的功能来减去任何日期部分 只需在前面添加负号 或乘以-1

  • 问题内容: 我正在研究一个数据仓库项目,并且想知道如何(最好在数据流中的“派生列”组件中)从SQL日期时间记录中删除日期。 将日期时间转换为时间后,我将对时间进行查询,以在时间维度表中找到相关的时间记录。 有人可以给我一个简单的函数,以在派生的列转换中完成此操作吗? 示例:将日期时间(例如“ 12/02/2008 11:32:21 AM”)转换为简单的“ 11:32:21 AM”。 问题答案: 我

  • 问题内容: 场景: 我有一个从Excel工作表中检索到具有多个列的数据框。其中一些列是日期:一些仅包含日期(yyyy:mm:dd),一些具有日期和时间戳(yyyy:mm:dd 00.00.000000)。 问题: 当日期不是数据框的索引时,如何从日期中删除时间戳? 我已经尝试了什么: 在SO的其他文章中使用pandas中的日期- 在datetime中删除看不见的字符并转换为字符串以及如何剥离pan