页面载入中...
首页 » Tag ‘转换’

SuperMemo UX数据库中的日期格式转换

打开SuperMemo UX的数据库,我们会发现其中的日期并没有用常见的"年-月-日"的格式,而是用了一个int值,这个值通常是5位数左右,它表示从1970年1月1日起的天数,对UX程序来讲,这样的储存方式便于计算时间间隔,而当你要以日期格式来表现的时候,只要处理一下就可以了。

舍得以python为例,讲解一下日期的格式转换:

比如我们要转换15517这个值,这里要用到fromordinal这个函数,下面是代码

def getdate(self,  date):
    __s_date = datetime.date(1970, 1, 1).toordinal()   #取1970年1月1日的ordinal值
    d = datetime.date.fromordinal(__s_date + date)   #加上传进来的以int表示的日期
    return d.strftime("%Y-%m-%d")   #返回"年-月-日"格式的日期

这样我们只要调用getdate就可以得到日期,如:

print(self.getdate(15517))

结果为:

>>>2012-06-26

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客

[编程心得]PyQt中“明天”的表示法

话说学苑有童鞋抱怨,说一直在看舍得的博客,希望舍得能多介绍一些SuperMemo和Tell Me More方面的使用技巧。这个要求估计比较难满足。倒不是因为SuperMemo和Tell Me More方面已经没什么好写——这绝对不是事实,只要将SuperMemo官网上的文章翻译翻译,再适度延伸一下,一篇文章就出来了,但舍得不想为了交任务而写东西。博客嘛!写下自己最想写的内容才是最佳的选择。这不,现在写上了编程方面的内容。

Qt用的人不少,不过PyQt的就略微少一些。但没关系,舍得用惯了就好。在这里所写的一些东西,都是舍得在实际编程的过程中用到的。之前舍得在学苑里有讲到,舍得向来是走实战流,更准确地讲是“改装流”。因为舍得从来不去探究代码背后的种种原理,往往满足于“我知道这段代码干什么用的”、“这里放这样的代码应该能解决问题”。由于非科班出身,代码难免写得难看点,执行效率多少会低一些,好在舍得的满足点比较低,只要“能用”就行了,这一点倒与不求上进的腾讯有些相似。

下面介绍的是在PyQt中“明天”的表示法,这是最近写的一个HR程序中用到的,先来看看今天怎么表示,比如说我们有一个DateEdit控件,叫做beginDayDateEdit,要给它赋上“今天”这个值就可以这样写:

beginDayDateEdit.setDate(QtCore.QDate.currentDate())

那明天呢?咋办办?

舍得看了看PyQt官方的说明文档,从中找到了一个方法,就是将currentDate先用toJulianDay转成数值形式,然后加1,再用fromJulianDay转回来就可以了,具体的代码如下:

tomorrow = QtCore.QDate.currentDate().toJulianDay() + 1
beginDayDateEdit.setDate(QtCore.QDate.fromJulianDay(tomorrow))

后天、大后天就可以依此类推,不再赘述。

不过在处理DateTimeEdit的控件会有所差异,此时用的不是toJulianDay和fromJulianDay,而是toTime_t和fromTime_t,我们来看看:

tomorrow = QtCore.QDateTime.currentDateTime().toTime_t() + 86400
self.beginDayDateEdit.setDateTime(QtCore.QDateTime.fromTime_t(tomorrow))

注意,由于控件改变了,setDate也变成了setDateTime,toTime_t把当前时间转成了从1970年1月1日00:00:00到现在的总秒数,要加1天的话,加上86400秒就行了。

 

 

本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客