>>fromdatetimeimportdatetime>>>now=datetime.now()>>>p" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

在Python的Flask框架中使用日期和時間的教程

系統 1788 0

?時間戳的問題

我們的微博應用的一個忽略了很久的問題就是日間和日期的顯示。

直到現在,我們在我們的User和Post對象中使用Python它自己的方式來渲染時間對象,但這并不是一個好的解決方案。

考慮下這樣的例子。我正在寫這篇文章,此時正是12月31號下午3:54。我的時區是PST(或者你們更習慣的:UTC-8)。 在Python解釋器中運行,我得到下面輸出:
?

            
>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2012-12-31 15:54:42.915204
>>> now = datetime.utcnow()
>>> print now
2012-12-31 23:55:13.635874

          

在我所在的地方,now()方法返回了正確的時間,但是now()調用返回的時間是UTC單位。


那么,使用哪個更好呢?

如果我們用now(),所有數據庫里的時間戳將會與服務器運行的當地時間一致,這將會產生一些問題。

比如,如果有一天,我們需要將服務器放到別的地方(不在一個時區),那么在重啟服務器之前,數據庫里的時間都需要更新到與新地點保持一致。

還會有更為重要的問題。不同時區的用戶將會很難知道什么時候發送郵件,如果用戶看到的是PST時區的時間,他們就很難知道郵件是什么時候發送的,這就需要用戶根據這個時間做相應的調整。


很顯然這不是一個好的選擇,這也是我們為什么在創建數據庫時就使用UTC時區保存時間戳。

在標準化時間戳為UTC時,解決了移動服務器的問題。但是他不能解決第二個問題,數據和時間在世界上不同地方使用UTC展現給用戶。

假設一個用戶在PST時區下午3點發送了一封郵件,這封郵件立刻顯示在他面前,上面寫著11:00pm,或者更具體點(23:00)。

我寫這個文章的目的也就是讓我們的用戶不再因為數據和時間的顯示而困惑。

使用具體的時間戳

通常的解決方法是,每一個用戶都從UTC轉化到當地的時間。這就需要我們動態變化,從而使數據庫的UTC與之保持一致。

但是我們怎么知道用戶在哪呢?

許多網站都有一個設置頁面設置他們的時區。這就需要我們添加一個新的頁面,并在表單上提供下拉框讓用戶選擇時區,用戶第一次登錄的時候需要設置時區,并把它作為注冊的一部分。


這是一個正常的解決方法,但是這對于用戶來說有點累贅,用戶需要輸入一條他們已經在操作系統中配置過的信息。所以如果我們能抓取到用戶電腦里設置的時區那解決問題會變得更有效率。

出于安全因素,瀏覽器不允許我們進入用戶操作系統獲取信息。即使它允許,我們也得知道在Windows,Linux,Mac,iOS,Android中從哪兒能獲得到時區,這還不包括其他非主流操作系統。

在瀏覽器中得到用戶的時區,然后通過標準的Javascript API獲取到。在Web 2.0世界中用戶允許Javascript執行(很少有網站不使用Javascript),所以通過Javascript獲取用戶時區是可行的。


我們用Javascript有兩種方式配置可用的時區:

??? 老派的做法:當用戶第一次登錄服務器時讓瀏覽器以某種方式發送時區信息給我們。這個可以通過Ajax調用,或者更簡單的通過meta refresh tag來實現。一旦服務器知道了時區信息,它就能保存它在用戶session中,然后調整所有頁面的時間顯示。
??? 新派的做法:不改變服務器端的任何東西,但仍然會發送UTC時間戳到客戶端瀏覽器。轉換UTC到本地時間的工作通過Javascript在客戶端執行。

兩種方法都是有效的,但第二種更有優勢一點。瀏覽器能依照系統本地配置最好滴完成時間轉換。像上午/下午 vs 24小時制,日/月/年 vs 月/日/年 還有其他各種文化的格式,這些格式都是瀏覽器可訪問的,但服務器就不一定了。

如果這些還不夠,那新派的做法還有一個更大的優勢,而且別人已經為我們做了這件事(moment.js要登場了)!

moment.js簡介

Moment.js 是一個小、免費、開源的Javascript庫,它將日期和事件提升到另一個等級。它提供了能想象到的所有的時間日期格式,下面就是一些。

要在我們的應用中使用moment.js就需要在我們的模板文件中寫那么一丟丟的Javascript代碼。我們先來通過ISO 8601 時間來創建一個moment對象。例如:通過上面Python例子的UTC時間來創建一個moment對象,就像這樣:
?

            
moment("2012-12-31T23:55:13 Z")

          

一旦對象被創建,它就可以被轉化成各種各樣格式類型的string。例如,將一個灰常冗長的時間顯示轉換為本地系統的時間:
?

            
moment("2012-12-31T23:55:13 Z").format('LLLL');

          

下面就是轉換以后的時間顯示:

            
Tuesday, January 1 2013 7:55 AM


          


這兒有更多的例子將同樣的時間戳轉化為不同的格式:

在Python的Flask框架中使用日期和時間的教程_第1張圖片

這個類庫對轉化選項的支持不止這些。除了format()之外,它還提供了fromNow()和calendar()這些更友好的時間戳轉化方法:?

201542191055278.jpg (187×88)

?注意上面所有的例子中服務器轉換相同的UTC時間,而你自己的本地瀏覽器則會轉換不同的時間。

最后我們補上漏掉的一點Javascript小技巧,在頁面中顯而易見的是,代碼實際上由moment返回了string類型。最簡單的完成方式是用Javascript的document.write方法:
?

            
          

通過使用Javascript的document.write是灰常簡單和直接的方式來生成一部分HTML代碼,然而需要注意的是這種方式有一些限制。最需要主義的一點就是document.write方法只能在document被加載時使用,當document加載完成后,它便不能修改document了。這個限制的結果就是當通過 Ajax 來加載數據時這種解決方案就失效了。
?
整合moment.js

這兒我們需要做一點點事把moment.js添加到我們的微博客中.

首先,我們需要下載moment.min.js這個庫到/app/static/js這個文件夾中,這樣它就可以作為靜態文件為客戶端服務。

然后我們在我們的模板文件(fileapp/templates/base.html)中添加這個庫(moment.min.js)的引用:

?

            
          

現在我們可以在模板文件中添加 " % (self.timestamp.strftime("%Y-%m-%dT%H:%M:%S Z"), format)) def format(self, fmt): return self.render("format(\"%s\")" % fmt) def calendar(self): return self.render("calendar()") def fromNow(self): return self.render("fromNow()")

注意這兒的render方法沒有直接返回一個string類型而是返回一個由我們的模板引擎Jinja2提供的Markup對象。這么做的原因是Jinja2默認會轉義所有string,舉例來說,我們的


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜a狂野欧美一区二区 | 很黄很色的小视频在线网站 | 神马久久蜜桃 | 欧美日韩精品一区二区三区四区 | 色宅男看片午夜大片免费看 | 日韩二区 | 二区三区不卡不卡视频 | 亚洲福利网 | 好爽好大www视频在线播放 | 毛片在线免费观看完整版 | 亚洲视频不卡 | jizzjizz丝袜老师 | 日韩三级欧美 | 欧美激情精品久久久久 | 天天视频国产 | 国产精品99久久久久久www | 久久一本日韩精品中文字幕屁孩 | 亚洲综合精品 | 亚欧免费视频一区二区三区 | 久草首页在线观看 | 99热久久国产综合精品久久国产 | 欧美亚洲欧美区 | 激情中文网 | 午夜理伦三级理论三级在线观看 | 成人免费精品 | 免费在线观看黄 | 亚洲视频在线看 | 丁香六月激情婷婷 | 99精品国产高清一区二区麻豆 | 免费国产午夜在线观看 | 99久久免费费视频在线观看 | 成人无码T髙潮喷水A片小说 | 亚洲精品AV无码喷奶水糖心 | 色人阁久久 | 在线视频 中文字幕 | 一区二区三区免费在线观看 | 日韩视频www| 星际迷航4| 欧美日韩视频在线第一区二区三区 | 亚洲一区二区视频 | 国产手机精品一区二区 |