使用zope.i18n和tal格式化日期/时间的方便函数

van.timeformat的Python项目详细描述


Python Format Functions

van.timefmt模块是用于特定日期/时间操作的支持模块。

>>> from datetime import date, datetime
>>> mydate = date(1975, 12, 17)
>>> mydatetime = datetime(1975, 12, 17, 5, 24, 36)

它提供了一个“timefmt”函数,可以获取日期或日期时间对象:

>>> from van.timeformat import ltimefmt, timefmt

Fixed formatting

固定格式是独立于区域设置的。它们在两种情况下都很有用:

  • 计算机可解析日期
  • 无本地化要求的项目

default formatting

如果未指定格式参数,则使用.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

如果“无”用作输入日期,则timefmt将返回“无”:

>>> 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

Extending formats

如果我们想扩展可用的格式列表,可以使用 此模块的meta.zcml中定义的“time_format”zcml命令。

一个使用示例是在configure.zcml中,其中定义了rfc2822格式。

注意:使用名称空间进行注册可能是个好主意。这个 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:'

Locale dependant translations

>>> 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'

正确选择日期和日期时间的默认值:

>>> 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

如果无用作输入日期,则ltimefmt将返回无:

>>> ltimefmt(None, us) is None
True

Localized formatting examples

短时间:

>>> 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

短日期:

>>> print ltimefmt(mydatetime, us, category="dateTime", length="short")
12/17/75 5:24 AM

中等日期时间:

>>> print ltimefmt(mydatetime, us, category="dateTime", length="medium")
Dec 17, 1975 5:24:36 AM

长日期:

>>> print ltimefmt(mydatetime, us, category="dateTime", length="long")
December 17, 1975 5:24:36 AM +000

Integration with 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)

Changes

1.1.1 (2012-01-05)

功能:

  • 在文档中添加时间示例。

错误修复:

  • 符合zope存储库策略。
  • 在安装zope.app.pagetemplate的条件下删除是个坏主意。

1.1.0 (2010-01-20)

功能:

  • 接受none作为timefmt和ltimefmt的参数。这些功能现在将 在这种情况下,不返回错误。

错误修复:

  • 重新添加错误删除的测试。
  • 更新依赖项:van.testing仅用于测试。
  • 更新测试以使用新的ztk包运行。
  • 添加作者电子邮件。

1.0.0 (2008-11-21)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java MongoOperations Upert/FindModify删除mongo中的所有字段   java括号中的二叉树,而!=空值无效   java com.*.*.**。安全CustomUserDetail无法强制转换为com。***。安全CustomUserDetail   java如何编写多线程算法来发现可用socket   java Spring Boot Solr:子文档的索引列表   java如何向maven shade插件添加外部jar文件   java zebra条形码扫描仪Android studio集成   java为什么一个地方的原始类型会导致其他地方的通用调用站点被视为原始类型?   java将swing控件拆分为相等的部分   java如何在jshell中为spring项目设置类路径   java关于如何从API级别19的时间选择器中删除此白边的提示?   存储二进制字符串所有可能序列的算法,Java   测试JUnitJava。lang.NullPointerException   java Google AppEngine数据库   JavaSpring如何向数据对象注入@Value?   在eclipse java项目中包含mavenant构建库   带有JSP/EL的java省略号(缩写文本)