使用zope.i18n和TAL格式化日期/时间的便利函数
项目描述
Python格式化函数
van.timefmt模块是一个用于日期/时间特定操作的辅助模块。
>>> from datetime import date, datetime >>> mydate = date(1975, 12, 17) >>> mydatetime = datetime(1975, 12, 17, 5, 24, 36)
它提供了一个“timefmt”函数,可以接受日期或datetime对象。
>>> from van.timeformat import ltimefmt, timefmt
固定格式化
固定格式是区域无关的。它们在两种情况下很有用:
计算机可解析的日期
没有本地化要求的计划
默认格式化
如果没有指定格式参数,日期和datetime将使用.isoformat(“ “)进行格式化
>>> print timefmt(mydatetime) 1975-12-17T05:24:36>>> print timefmt(mydate) 1975-12-17
‘iso’格式也会触发此操作
>>> print timefmt(mydatetime, format='iso') 1975-12-17T05:24:36
如果使用None作为输入日期,timefmt将返回None
>>> timefmt(None) is None True
rfc2822
符合RFC 2822互联网电子邮件标准的日期。
>>> print timefmt(mydate, 'rfc2822') Wed, 17 Dec 1975 00:00:00 +0000>>> print timefmt(mydatetime, 'rfc2822') Wed, 17 Dec 1975 05:24:36 +0000
扩展格式
如果我们想扩展可用格式的列表,我们可以使用此模块的meta.zcml中定义的"time_format" zcml命令。
一个使用示例在configure.zcml中,其中定义了rfc2822格式。
注意:使用命名空间进行注册可能是个好主意。van.timeformat模块承诺在其默认注册中不使用“。”。
Unicode
返回类型是unicode字符串
>>> timefmt(mydatetime) u'1975-12-17T05:24:36'
我们可以在格式中使用unicode
>>> timefmt(mydatetime, format='unicode_test') u'1975-17-12 Extended Arabic-Indic Digit Seven: \u06f7:'
区域依赖性翻译
>>> from zope.i18n.locales import locales >>> german = locales.getLocale('de', 'de') >>> us = locales.getLocale('en', 'us') >>> britain = locales.getLocale('en', 'gb')
返回unicode
>>> ltimefmt(mydate, us) u'Dec 17, 1975'
为日期和datetime选择了正确的默认值
>>> print ltimefmt(mydate, us) Dec 17, 1975 >>> print ltimefmt(mydatetime, us) Dec 17, 1975 5:24:36 AM
但我们可以强制一种格式作为另一种格式
>>> print ltimefmt(mydate, us, category="dateTime") Dec 17, 1975 12:00:00 AM >>> print ltimefmt(mydatetime, us, category="date") Dec 17, 1975
本地化
>>> print ltimefmt(mydate, britain, category="date", length="long") 17 December 1975 >>> print ltimefmt(mydate, german, category="date", length="long") 17. Dezember 1975
如果使用None作为输入日期,ltimefmt将返回None
>>> ltimefmt(None, us) is None True
本地化格式化示例
短时间
>>> print ltimefmt(mydate, us, category="time", length="short") 12:00 AM
短日期
>>> print ltimefmt(mydate, us, category="date", length="short") 12/17/75
中日期
>>> print ltimefmt(mydate, us, category="date", length="medium") Dec 17, 1975
长日期
>>> print ltimefmt(mydate, us, category="date", length="long") December 17, 1975
短datetime
>>> print ltimefmt(mydatetime, us, category="dateTime", length="short") 12/17/75 5:24 AM
中datetime
>>> print ltimefmt(mydatetime, us, category="dateTime", length="medium") Dec 17, 1975 5:24:36 AM
长datetime
>>> print ltimefmt(mydatetime, us, category="dateTime", length="long") December 17, 1975 5:24:36 AM +000
与ZPT集成
如果 zope.app.pagetemplate 模块可用,timeformat 模块将与其集成
>>> import os >>> import tempfile >>> from zope.publisher.browser import TestRequest>>> temp_file = tempfile.mkstemp()[1] >>> open(temp_file, 'w').write(""" ... <html> ... <body tal:define="mydatetime python:modules['datetime'].datetime(1975, 12, 17, 5, 24, 36)"> ... RFC 2822 date : <span tal:replace="timefmt:rfc2822:mydatetime" /> ... Medium Time : <span tal:replace="ltimefmt:time:medium:mydatetime" /> ... Medium Date : <span tal:replace="ltimefmt:date:medium:mydatetime" /> ... Medium DateTime : <span tal:replace="ltimefmt:dateTime:medium:mydatetime" /> ... Python Expr (ltimefmt): <span tal:replace="ltimefmt:dateTime:long:python:modules['datetime'].date(1975, 12, 17)" /> ... Python Expr (timefmt) : <span tal:replace="timefmt:rfc2822:python:modules['datetime'].date(1975, 12, 17)" /> ... </body> ... </html> ... """)>>> from zope.app.pagetemplate.simpleviewclass import SimpleViewClass >>> Page = SimpleViewClass(temp_file, name='main.html') >>> request = TestRequest() >>> print Page(None, request)().strip() # doctest: +NORMALIZE_WHITESPACE <html> <body> RFC 2822 date : Wed, 17 Dec 1975 05:24:36 +0000 Medium Time : 05:24:36 Medium Date : 1975 12 17 Medium DateTime : 1975 12 17 05:24:36 Python Expr (ltimefmt): 1975 12 17 00:00:00 +000 Python Expr (timefmt) : Wed, 17 Dec 1975 00:00:00 +0000 </body> </html>
使用德语区域设置
>>> request = TestRequest(environ={'HTTP_ACCEPT_LANGUAGE': 'de-de'}) >>> print Page(None, request)().strip() <html> <body> RFC 2822 date : Wed, 17 Dec 1975 05:24:36 +0000 Medium Time : 05:24:36 Medium Date : 17.12.1975 Medium DateTime : 17.12.1975 05:24:36 Python Expr (ltimefmt): 17. Dezember 1975 00:00:00 +000 Python Expr (timefmt) : Wed, 17 Dec 1975 00:00:00 +0000 </body> </html>
让我们看看冒号后面的空格(在各个位置)是否工作
>>> open(temp_file, 'w').write(""" ... <html> ... <body tal:define="mydatetime python:modules['datetime'].datetime(1975, 12, 17, 5, 24, 36)"> ... RFC 2822 date : <span tal:replace="timefmt: rfc2822:mydatetime" /> ... Medium Date : <span tal:replace="ltimefmt: date: medium:mydatetime" /> ... Medium DateTime : <span tal:replace="ltimefmt: dateTime:medium: mydatetime" /> ... Python Expr (ltimefmt): <span tal:replace="ltimefmt: dateTime:long: python:modules['datetime'].date(1975, 12, 17)" /> ... Python Expr (timefmt) : <span tal:replace="timefmt: rfc2822: python:modules['datetime'].date(1975, 12, 17)" /> ... </body> ... </html> ... """)>>> Page = SimpleViewClass(temp_file, name='main_with_spaces.html') >>> request = TestRequest() >>> print Page(None, request)().strip() # doctest: +NORMALIZE_WHITESPACE <html> <body> RFC 2822 date : Wed, 17 Dec 1975 05:24:36 +0000 Medium Date : 1975 12 17 Medium DateTime : 1975 12 17 05:24:36 Python Expr (ltimefmt): 1975 12 17 00:00:00 +000 Python Expr (timefmt) : Wed, 17 Dec 1975 00:00:00 +0000 </body> </html>
清理
>>> os.remove(temp_file)
变更
1.1.1 (2012-01-05)
功能
将时间示例添加到文档中。
错误修复
符合 Zope 存储库政策。
移除了对 zope.app.pagetemplate 安装的依赖条件,这是一个坏主意。
1.1.0 (2010-01-20)
功能
接受 None 作为 timefmt 和 ltimefmt 的参数。这些函数现在在这种情况下将返回 None 而不是错误。
错误修复
重新添加错误删除的测试。
更新依赖关系:van.testing 只在测试中需要。
更新测试以与新 ZTK 包一起运行。
添加作者电子邮件。
1.0.0 (2008-11-21)
初始发布
项目详情
van.timeformat-1.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7853912fd1059fd9baf15adfc0274db6f3d4c06aa4744c27b86bacbfb8efae4d |
|
MD5 | 4f1c332caf7b403f88ca2133abc364a9 |
|
BLAKE2b-256 | ad019fea46ec0729b6c72ccf7bcdc54c33e7f954fb6dfe41c6ca3ef11e4b5c35 |