相关疑难解决方法(0)

无法减去offset-naive和offset-aware datetimes

timestamptz在PostgreSQL中有一个时区感知字段.当我从表中提取数据时,我想立即减去时间,以便我可以得到它的年龄.

我遇到的问题是,无论是datetime.datetime.now()datetime.datetime.utcnow()似乎回到时区不知道时间戳,这导致我得到这个错误:

TypeError: can't subtract offset-naive and offset-aware datetimes 
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种情况(最好不使用第三方模块).

编辑:感谢您的建议,但是尝试调整时区似乎给了我错误..所以我只是在PG中使用时区不知道的时间戳并始终使用:

NOW() AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud)

这样我的所有时间戳都默认为UTC(尽管这样做更烦人).

python postgresql timezone datetime

271
推荐指数
9
解决办法
19万
查看次数

django 1.4 - 无法比较offset-naive和offset-aware datetimes

我正在将应用程序从django 1.2迁移到1.4.

我有一个每日任务对象,其中包含应该完成任务的时间:

class DailyTask(models.Model):
    time = models.TimeField()
    last_completed = models.DateTimeField()
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=1000)
    weekends = models.BooleanField()

    def __unicode__(self):
        return '%s' % (self.name)

    class Meta:
        db_table = u'dailytask'
        ordering = ['name']
Run Code Online (Sandbox Code Playgroud)

为了检查今天是否仍需要完成任务,我有以下代码:

def getDueDailyTasks():
    dueDailyTasks=[]
    now = datetime.datetime.now()
    try:
        dailyTasks = DailyTask.objects.all()
    except dailyTask.DoesNotExist:
        return None
    for dailyTask in dailyTasks:
        timeDue = datetime.datetime(now.year,now.month,now.day,dailyTask.time.hour,dailyTask.time.minute,dailyTask.time.second)
        if timeDue<now and timeDue>dailyTask.last_completed:
            if dailyTask.weekends==False and now.weekday()>4:
                pass
            else:
                dueDailyTasks.append({'id':dailyTask.id,
                            'due':timeDue,
                             'name': dailyTask.name,
                             'description':dailyTask.description})
    return dueDailyTasks
Run Code Online (Sandbox Code Playgroud)

这在1.2下工作正常,但在1.4以下我得到错误:

can't compare offset-naive and offset-aware datetimes …
Run Code Online (Sandbox Code Playgroud)

python django timezone

82
推荐指数
1
解决办法
5万
查看次数

即使时区遍布亚洲/ Calcutta,Django模型的DateTimeField也采用UTC

我正在使用Django 1.11。我settings.py已配置以下内容:

TIME_ZONE = 'Asia/Calcutta'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

这是IST(印度标准时间)。我的系统设置为IST。MySQL current_time返回IST(运行时Django的服务器),并在IST中显示时间戳。Python datetime.now()也提供IST。

现在的问题是,我models.py有以下几个字段:

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

数据库是MySQL。当我在其中插入任何记录时,时间戳记为UTC。我正在考虑根据答案的建议添加一些中间件,但这并不是推荐的方法。即使已配置了所有IST,为什么还要采用UTC?我是否缺少一些需要为模型单独设置的配置?

请注意这个问题与我所要求的不同。我想更改整个时区,以便它在模型中也有效。

python mysql django timezone datetime

4
推荐指数
1
解决办法
1276
查看次数

Python:如何比较两个日期/时间?

我有以下两个日期/时间,分别是date_time1date_time2

2017-04-15 00:00:00
2017-04-17 15:35:19+00:00

parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)
Run Code Online (Sandbox Code Playgroud)

如果我收到另一个日期/时间input_date_time(例如 2017-04-16 12:11:42+00:00),我想做以下事情:

#    Would like to check if `input_date_time` is within the range 
if parsed1 <= input_date_time <= parsed2:
… 
Run Code Online (Sandbox Code Playgroud)

并得到一个错误: TypeError: can't compare offset-naive and offset-aware datetimes

想把它分解成年、月、日、小时、分钟和秒,然后比较每一个。

这样做的正确方法是什么?

python datetime python-dateutil

2
推荐指数
1
解决办法
2万
查看次数

django doc 上的 pycharm IDE 警告:预期类型“timedelta”,得到“DateTimeField”而不是 python 3.7 pycharm 2019.3

Django 的文档中是以下代码片段

from django.db import models
from django.utils import timezone
import datetime


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)

Pycharm亮点self.pub_date和喊话

预期类型为“timedelta”,但得到“DateTimeField”

我该如何摆脱这个并做正确的事情?

python django

2
推荐指数
1
解决办法
2538
查看次数