我怎样才能得到datetime.strftime的最大长度?



目前我正在编写一个命令行程序,在那里我打印出日期。

我这样做datetime.datetime.strftime:

import datetime
d = datetime.datetime(2012,12,12)
date_str = d.strftime(config.output_str)

其中config.output_str是可由用户设置的格式字符串。

是否有一种方法来告诉多长时间字符串date_str将在最大?

特别是如果使用像u'%d %B %Y'这样的格式字符串,其中月份的长度(%B)取决于用户的语言?

如果您没有使用locale模块设置语言环境,则Python使用C语言环境,您可以预测生成的最大长度。所有字符串都是英文,并且每个格式字符的最大长度是已知的。

自己解析字符串,计算非格式字符并将格式字符映射到该字段的最大长度。

如果使用locale,则需要计算每种语言的最大长度。您可以通过循环月份、工作日和AM/PM并测量%a%A%b%B%c%p%x%X格式的最大长度来自动化依赖于区域设置的字段。如果需要的话,我会在飞行中这样做。

其余的格式不因地区而异,并且有一个记录的最大长度(strptime表中的示例是典型的,您可以依赖那些记录字段长度的格式)。

这里是我写的解决方案,对于那些感兴趣的人。

我使用给定的格式字符串format_str来计算它可以得到多长时间。因此,我假设只有月和日可以很长。该函数循环遍历月份,看看哪个月份的形式最长,然后循环遍历前面找到的月份的天数。

import datetime
def max_date_len(format_str):
    def date_len(date):
        return len(date.strftime(format_str))
    def find_max_index(lst):
        return max(range(len(lst)), key=lst.__getitem__)
    # run through all month and add 1 to the index since we need a month
    # between 1 and 12
    max_month = 1 + find_max_index([date_len(datetime.datetime(2012, month, 12, 12, 12)) for month in range(1, 13)])
    # run throw all days of the week from day 10 to 16 since
    # this covers all weekdays and double digit days
    return max([date_len(datetime.datetime(2012, max_month, day, 12, 12)) for day in range(10, 17)])

相关内容

  • 没有找到相关文章