【问题标题】:time.strptime changing output formattingtime.strptime 改变输出格式
【发布时间】:2012-03-02 21:18:12
【问题描述】:

我正在尝试在我的函数中更改 strptime 和 datetime 的默认输出格式:

   def start_week_date(year, week):
        format_string = "%i %i 1" % (int(year),int(week))
        start = time.strptime(format_string, '%Y %W %w')
        print datetime.date(start.tm_year, start.tm_mon, start.tm_mday)
        return datetime.date(start.tm_year, start.tm_mon, start.tm_mday)

其中的输出正在传递给另一个:

for date_oncall in date_range(start_week_date(year,week), start_week_date(year,week+1)):
    print date_oncall

def date_range(start_date, end_date):
    """Generator of dates in between"""
    if start_date > end_date:
        raise ValueError("Start date is before end date.")
    while True:
        yield start_date
        start_date = start_date + datetime.timedelta(days=1)
        if start_date >= end_date:
            break

有没有一种优雅的方法来更改默认格式,所以如果一个月或一个月中的某天小于 10,它在开始时不会得到“0”? 基本上,我想得到 '3-5-2012' 而不是 '03-05-2012'。

非常感谢您的任何建议。

问候, 雅库布

【问题讨论】:

标签: python time strptime


【解决方案1】:

查看此链接:

http://www.tutorialspoint.com/python/time_strftime.htm

通过使用

time.strftime(string[, format])

您可以使用 '%e' 指定月份格式中不带 '0' 开头的日期。

【讨论】:

  • %e 似乎不适用于 strftime:date_oncall.strftime('%e') 给出了 ValueError
【解决方案2】:

date 对象有一个方法,strftime,可以手动指定格式,但它没有选项来做你想做的事 - 所以,这意味着你需要自己从其他属性构造字符串的date_oncall。好消息是这很容易:

>>> '{d.day}-{d.month}-{d.year}'.format(d=date_oncall)
'17-1-2010'

【讨论】:

  • 这正是我一直在寻找的 - 谢谢! C[_](给你一杯虚拟咖啡:))你能解释一下当你构造那个字符串时发生了什么吗?我不太明白 '{0}'.format(date_oncall) 和你的方式有什么区别。
  • 相当于{}-{}-{}.format(date_oncall.day, date_oncall.month, date_oncall.year)。格式 minilanguage 允许您将属性查找放入字符串本身,这有助于在这种情况下清晰。关键字参数 (d=date_oncall) 只是让我们为字符串中的对象使用名称 - {.day}-{.month}-{.year} 很好,但需要三次指定相同的日期,因为三个 {} 使用连续的位置参数。因此,您需要 {0.day}-{0.month}-{0.year} ,但此时您不妨使用关键字参数。
  • 再次感谢 lvc - 我不知道 strftime 具有您上面列出的属性。我阅读了时间文档,它变得更加清晰。干杯,J。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2010-11-18
  • 2022-01-21
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多