当输入字符串格式未知时,添加一天(字符串格式)

时间:2018-04-02 21:16:00

标签: python datetime python-2.x

我有格式 day/month/year

我有一项任务是定义一个带date的函数,并返回增加1天的日期 例如:

next_day("13/1/2018")返回14/1/2018

next_day("31/3/2018")返回1/4/2018

我怎么能这样做,当函数采用date而非daymonthyear时,我不知道如何执行此操作。

2 个答案:

答案 0 :(得分:1)

这是使用标准库中的第三方dateutil库和datetime的一种方式。

import datetime
from dateutil import parser

def add_day(x):
    try:
        new = parser.parse(x) + datetime.timedelta(days=1)
    except ValueError:
        new = parser.parse(x, dayfirst=True) + datetime.timedelta(days=1)
    return new.strftime('%d/%m/%Y').lstrip('0').replace('/0', '/')

add_day('13/1/2018')  # '14/1/2018'
add_day('31/3/2018')  # '1/4/2018'

尝试使用datetime执行相同的逻辑将更具限制性,这可能不是您想要的,因为您可以保证输入日期的格式并不明显。

<强>解释

  • 尝试按月顺序解析(默认),然后是第一天。
  • 使用datetime.timedelta添加一天。
  • 使用字符串格式删除前导零。

datetime解决方案

import datetime

def add_day(x):
    try:
        new = datetime.datetime.strptime(x, '%m/%d/%Y') + datetime.timedelta(days=1)
    except ValueError:
        new = datetime.datetime.strptime(x, '%d/%m/%Y') + datetime.timedelta(days=1)
    return new.strftime('%d/%m/%Y').lstrip('0').replace('/0', '/')

add_day('13/1/2018')  # '14/1/2018'
add_day('31/3/2018')  # '1/4/2018'

答案 1 :(得分:0)

您可以尝试此功能至少返回当前日期。

延期日期{

var withWeekDayMonthDayAndYear: String {
    let formatter = DateFormatter()
    formatter.timeZone = TimeZone(abbreviation: "EST")
    formatter.dateFormat = "EEEE, MMMM dd, yyyy"
    return formatter.string(from: self)
}

然后使用扩展名.. ((日期()。withWeekDayMonthDayAndYear))

这是一个开始..