Datetime中offset-naive与offset-aware时间的计算

在使用Django时,默认是开启对多时区的支持的,在获取时间的时候会是如下形式:

datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)

我们可以利用django.utils.timezone中提供的localtime方法来将该时间转换为本地时间:


1

2

3

4

>>> dt

datetime.datetime(201441815377, tzinfo=<UTC>)

>>> localtime(dt)

datetime.datetime(201441823377, tzinfo=<LocalTimezone>)

有时候,我们需要将该时间与当前时间做比较,例如计算差值,你可能会想到直接这么做:


1

2

3

>>> import datetime

>>> now = datetime.datetime.now()

>>> now - dt

不过这是不对的,并告知如下错误:


1

2

3

Traceback (most recent call last):

  File "<console>", line 1in <module>

TypeError: can‘t subtract offset-naive and offset-aware datetimes

问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:


1

2

3

4

5

>>> dt = dt.replace(tzinfo=None)

>>> dt

datetime.datetime(201441815377)

>>> now - dt

datetime.timedelta(034108443000)

时间: 2024-10-26 04:17:13

Datetime中offset-naive与offset-aware时间的计算的相关文章

javascript中常用坐标属性offset、scroll、client

原文:javascript中常用坐标属性offset.scroll.client 今天在学习js的时候觉得这个问题比较容易搞混,所以自己画了一个简单的图,并且用js控制台里面输出测试了下,便于理解. 1.在文档(document)对象里面用: scrollWidth/Height:获取对象的滚动宽度(滚动条可以滚动的宽度,相当于整个页面的总宽度的样子--网页正文全宽) scrollLeft/Top:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离(页面利用滚动条滚动到右边时,隐藏在

jquery中使用css,offset和position设置top和left属性

有一个dom元素,它的position属性值为absolute,要通过jquery设置它的位置. 我们可以通过三种方法设置该元素的top和left值,设置这两个属性的值时,元素的position属性必须为absolute或relative. 第一种:使用jQuery对象的css方法,使用该方法可以直接把对象的位置设定到指定的地方,指定哪个位置就是哪个位置. 第二种:使用jQuery对象的offset方法,使用该方法时要注意,offset方法的作用是获取或设置匹配元素在当前视口的相对偏移.这句话粗

linux在二进制文件中查找pattern的offset

参考:http://stackoverflow.com/questions/14141008/grep-offset-of-ascii-string-from-binary-file strings -a -t x filename | grep foobar linux在二进制文件中查找pattern的offset

OFFSET约束(OFFSET IN 和OFFSET OUT)

系列目录  时序收敛:基本概念 建立时间和保持时间(setup time 和 hold time) OFFSET约束(OFFSET IN 和OFFSET OUT) 1. OFFSET约束的写法 Offset 约束定义了外部时钟pad和与之相关的输入.输出pad之间的相对关系.这是一个基础的时序约束.Offset定义的是外部之间的关系,不能用在内部信号上. OFFSET约束写起来还是比较简单的,如 OFFSET = {IN|OUT} offset_time [units] {BEFORE|AFTE

050:navie时间和aware时间详解

navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的.也就是不知道自己几斤几两.比较幼稚. aware时间:知道自己的时间表示的是哪个时区的.也就是比较清醒. pytz库: 专门用来处理时区的库.这个库会经常更新一些时区的数据,不需要我们担心.并且这个库在安装Django的时候会默认的安装.如果没有安装,那么可以通过pip install pytz的方式进行安装. astimezone方法: 将一个时区的时间转换为另外

【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59

[转] c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59 stp1为第一个DateTimePicker this.dtp1.Value=this.dtp1.Value.Date; stp2为第二个DateTimePicker 设置dtp2的值的时间部分是23:59:59. this.dtp2.Value = new DateTime(this.dtp2.Value.Year, this.dtp2.Value.Month, this.dtp2.Valu

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值.毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数. 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间.分钟.秒和毫

Android中通过反射来设置显示时间

这个Toast的显示在Android中的用途还是很大的,同时我们也知道toast显示的时间是不可控的,我们只能修改他的显示样式和显示的位置,虽然他提供了一个显示时间的设置方法,但是那是没有效果的(后面会说到),他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间其实是2.5s和3s.那么我们如果真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,而且Linux之父曾经说过:遇到问题就去看那个操蛋的源代码吧!!下面就从源代码开

5 个在 Linux 中管理文件类型和系统时间的有用命令

对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用. 在 Linux 中管理文件类型和设置时间 请先查看我们 Linux 小技巧系列之前的文章: 5 个有趣的 Linux 命令行技巧 给新手的 10 个有用 Linux 命令行技巧 在这篇文章中,我们打算看看终端中 5 个和文件以及