Python 更改格式为“0”的8个字符字符串;yyyymmdd“;转换为年、月和日整数值

Python 更改格式为“0”的8个字符字符串;yyyymmdd“;转换为年、月和日整数值,python,string,Python,String,我正在尝试编写一个函数,将形式为“yyyymmdd”的8个字符的字符串转换为基于该字符串的年、月和日的整数值。函数解析给定字符串并返回整型年、月和日。我为它编写了代码,但在以正确的格式返回正确的整数值时遇到了困难。例如:y,m,d=parseDate(“19700218”)应该为y返回整数值1970,为m返回整数值2,为d返回整数值18。 我的代码不正确,但我认为它的开头是正确的: def parseDate(datestr): datestr.split() datestr.s

我正在尝试编写一个函数,将形式为“yyyymmdd”的8个字符的字符串转换为基于该字符串的年、月和日的整数值。函数解析给定字符串并返回整型年、月和日。我为它编写了代码,但在以正确的格式返回正确的整数值时遇到了困难。例如:y,m,d=parseDate(“19700218”)应该为y返回整数值1970,为m返回整数值2,为d返回整数值18。 我的代码不正确,但我认为它的开头是正确的:

def parseDate(datestr):
    datestr.split()
    datestr.strip()
    return datestr
y、 m,d=解析日期(“19700218”)

我希望这只是一个简单的解决方案。

我建议使用解析的日期/日期时间对象并从中获取值

这是一个开箱即用、灵活且可扩展的解决方案。

我建议使用解析的日期/日期时间对象并从中获取值


这是一种开箱即用、灵活且可扩展的解决方案。

尝试以下方法:

def parse_date(string_date):
    year = int(string_date[0:4])
    month = int(string_date[4:6])
    day = int(string_date[6:8])
    return year, month, day

year, month, day = parse_date(date)
测试代码

date = '19901131'

def parse_date(string_date):
    year = int(string_date[0:4])
    month = int(string_date[4:6])
    day = int(string_date[6:8])
    return year, month, day

year, month, day = parse_date(date)

print(year)
print(month)
print(day)
输出

1990
11
31
y=1970
m=02
d=18

因为我们正在转换为int,所以前导0将被删除。如果您想要包含leadings 0s的格式,请告诉我,尝试以下方法:

def parse_date(string_date):
    year = int(string_date[0:4])
    month = int(string_date[4:6])
    day = int(string_date[6:8])
    return year, month, day

year, month, day = parse_date(date)
测试代码

date = '19901131'

def parse_date(string_date):
    year = int(string_date[0:4])
    month = int(string_date[4:6])
    day = int(string_date[6:8])
    return year, month, day

year, month, day = parse_date(date)

print(year)
print(month)
print(day)
输出

1990
11
31
y=1970
m=02
d=18
因为我们正在转换为int,所以前导0将被删除。如果您想包含包含引线0s代码的格式,请告诉我

s = "19700218"
y = s[0:4]
m = s[5:6]
d = s[6:8]
输出

1990
11
31
y=1970
m=02
d=18
希望有帮助。

代码

s = "19700218"
y = s[0:4]
m = s[5:6]
d = s[6:8]
输出

1990
11
31
y=1970
m=02
d=18

希望有帮助。

您知道
split
strip
要做什么吗?如果您想让函数提供三个值,您还应该返回三个值,然后再进行计算。您只需返回未更改的函数字符串。一种简单的方法是索引,如:date='19700218'year=date[0:4]etcDo您知道拆分和剥离要做什么吗?如果您想让函数提供三个值,您还应该返回三个值,然后再进行计算。您只需返回未更改的函数字符串。一种简单的方法是索引,如:date='19700218'year=date[0:4]等。这一切都可以简化为
year,month,day=map(int,(string\u date[:4],string\u date[4:6],string\u date[6:])
。但是OP在他的问题中使用了一个函数。我认为最好以同样的格式提供答案。另外,我相信它更清楚地描述了正在发生的事情,而不是将其浓缩成一行。我认为函数定义也更接近OP想要的。然而,我不明白为什么你没有将转换为
int
的功能包括进来-它在函数之外做了什么?有趣的是,你这么说,我在你发表评论之前就编辑了。我只是想说明我建议背后的逻辑。这自然可以包含在函数中。这当然很清楚,而且很像蟒蛇,不过可能需要向初学者解释
map()
does。我提到这一点是因为这是对你简洁回答的自然跟进。这可以简化为
年、月、日=map(int,(string_-date[:4],string_-date[4:6],string_-date[6:])
。没错,但OP在他的问题中使用了一个函数。我认为最好以同样的格式提供答案。另外,我相信它更清楚地描述了正在发生的事情,而不是将其浓缩成一行。我认为函数定义也更接近OP想要的。然而,我不明白为什么你没有将转换为
int
的功能包括进来-它在函数之外做了什么?有趣的是,你这么说,我在你发表评论之前就编辑了。我只是想说明我建议背后的逻辑。这自然可以包含在函数中。这当然很清楚,而且很像蟒蛇,不过可能需要向初学者解释
map()
does。我提到这一点是因为这是对你简洁回答的自然跟进。