在 django datetime 上使用 strftime 会在字符串中生成 UTC 时间
Posted
技术标签:
【中文标题】在 django datetime 上使用 strftime 会在字符串中生成 UTC 时间【英文标题】:Using strftime on a django datetime produces a UTC time in the string 【发布时间】:2012-08-08 04:37:50 【问题描述】:我的一个模型中有以下代码:
def shortDescription(self):
return self.name + ' ' + self.class_date.strftime("%I:%M")
self.class_date
是时区感知 DateTimeField
,self.class_date.is_aware()
是 True
,USE_TZ
是 True
。
shortDescription 返回一个以 UTC 而非默认时区提供时间的字符串,将 aclass.class_date
放入模板中会显示正确时区的时间。
strftime
是否总是在本地时间的基础上工作?还是这里发生了什么?
【问题讨论】:
“时区感知日期”是什么意思?这是什么课? 【参考方案1】:当您直接引用 %I
或 %M
之类的日期时间片段时,它会直接使用它,因为它没有进行语言环境转换。如果您包含%Z
,您会看到时间在UTC
。如果您想要了解区域设置的结果,则需要使用更有限的%X
,它只会显示为区域设置转换的全部时间。
如果你需要更多,你必须转换它:
from django.utils import timezone
def shortDescription(self):
class_date = timezone.localtime(self.class_date)
return self.name + ' ' + class_date.strftime("%I:%M")
或者,您可以依赖 date
过滤器,它会自动为您执行此操作:
from django.template import defaultfilters
def shortDescription(self):
return self.name + ' ' + defaultfilters.date(self.class_date, 'g:i')
【讨论】:
优秀。而且我根本不知道 defaultfilters 技巧。 是的,我一直在使用它。 Django 模板过滤器只是常规方法,因此您可以在代码中的任何位置使用它们中的任何一个。defaultfilters.slugify
也经常派上用场。
对我不起作用,same Problem here
第一种方法效果更好。谢谢你的解决方案。 :)
class_date
在第二种方法中也需要转换为当地时间。以上是关于在 django datetime 上使用 strftime 会在字符串中生成 UTC 时间的主要内容,如果未能解决你的问题,请参考以下文章
Python:AttributeError:'str'对象没有属性'datetime'
使用具有正确语法的 pandas to_datetime() 方法,无法识别的值类型:str?
String str=“2011-11-11 22:22:22” 如何把str转换成datetime类型存入mysql中