首页 / PYTHON / 日期天数差计算(Python)
日期天数差计算(Python)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了日期天数差计算(Python),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5530字,纯文字阅读大概需要8分钟。
内容图文
![日期天数差计算(Python)](/upload/InfoBanner/zyjiaocheng/830/84e0097d601045b2bd2280c344d8debb.jpg)
描述
从json文件中读取两个时间数据(数据格式例如:2019.01.01,数据类型是字符串),并计算结果,打印出两个时间间隔了多少天。
输入/输出描述
输入描述
json文件名称datetime.json,格式如下:
{
"day1": "1949.10.01",
"day2": "2019.04.25"
}
输出描述
控制台打印两个时间(day1和day2)间隔了多少天。
25408
解决思路
读取json文件中的数据后解析有用的部分,并做校验(检查格式是否正确)。在日期格式正确的情况下将日期转换为datetime.date,并做计算。最后输出结果。
代码
"""
时间差计算。
从json文件中读取两个时间数据,计算并打印两个时间间隔了多少天。
"""
import datetime
import json
import traceback
class TimeFormatError(Exception):
def __init__(self, message):
self.message = "TimeFormatError: " + message
def days_compute(times):
"""
Calculated date interval.
:param times: <dict> time dictionary
:return: <int> date interval
"""
time1 = times["day1"]
time2 = times["day2"]
if time1.count(".") < 2:
raise TimeFormatError("Time format(yyyy.mm.dd) error. %s" % time1)
if time2.count(".") < 2:
raise TimeFormatError("Time format(yyyy.mm.dd) error. %s" % time2)
date1 = parse(time1)
date2 = parse(time2)
return (date2 - date1).days
def parse(time_str):
"""
Parse time format.
:param time_str: <str> time string
:return: <datetime.date> date
"""
time_list = time_str.split(".")
year = time_list[0]
month = time_list[1]
day = time_list[2]
return datetime.date(int(year), int(month), int(day))
def read_json_file(path):
"""
Read json file.
:param path: <str> json file url
:return: <dict> json file data
"""
with open(path, "r") as json_file:
data = json.load(json_file)
json_file.close()
return data
# main method
url = "datetimes.json"
try:
base = read_json_file(url)
day = days_compute(base)
print(day)
except TimeFormatError as e:
print(str(e))
print("errmsg:\n%s" % traceback.format_exc())
except Exception as e:
print(str(e))
print("errmsg:\n%s" % traceback.format_exc())
代码走读
import datetime
import json
import traceback
# 自定义异常类型TimeFormatError, 用于在代码中校验错误时间格式时抛出
class TimeFormatError(Exception):
def __init__(self, message):
self.message = "TimeFormatError: " + message
# 定义计算日期差的函数
def days_compute(times):
"""
Calculated date interval.
:param times: <dict> time dictionary
:return: <int> date interval
"""
?
? # 从字典中获取两个时间日期
time1 = times["day1"]
time2 = times["day2"]
? # 日期格式校验,如果日期格式错误(例如“2019.10”),抛出TimeFormatError
if time1.count(".") < 2:
raise TimeFormatError("Time format(yyyy.mm.dd) error. %s" % time1)
if time2.count(".") < 2:
raise TimeFormatError("Time format(yyyy.mm.dd) error. %s" % time2)
? # 在这里调用自定义的parse函数,将两个日期时间格式由字符串转换为datetime.date格式
date1 = parse(time1)
date2 = parse(time2)
? # 返回计算结果(整型)
return (date2 - date1).days
# 解析时间字符串,转换为datetime.date格式
def parse(time_str):
"""
Parse time format.
:param time_str: <str> time string
:return: <datetime.date> date
"""
? # 使用split()函数将字符串转化为列表,并分解出年月日
time_list = time_str.split(".")
year = time_list[0]
month = time_list[1]
day = time_list[2]
? # 将日期转换为datetime.date格式并返回
return datetime.date(int(year), int(month), int(day))
# 读取json文件的信息,将json文件转化为字典格式
def read_json_file(path):
"""
Read json file.
:param path: <str> json file url
:return: <dict> json file data
"""
with open(path, "r") as json_file:
data = json.load(json_file)
json_file.close()
return data
# main method
# 代码开始执行的地方
# json文件的url
url = "datetimes.json"
try:
? # 调用自定义的read_json_file函数获取json文件的内容
base = read_json_file(url)
? # 计算结果,并打印输出
day = days_compute(base)
print(day)
# 捕获异常,打印错误信息和堆栈
except TimeFormatError as e:
print(str(e))
print("errmsg:\n%s" % traceback.format_exc())
except Exception as e:
print(str(e))
print("errmsg:\n%s" % traceback.format_exc())
传送门
1. count()函数
https://blog.csdn.net/TCatTime/article/details/87388941
2. split()方法
https://blog.csdn.net/TCatTime/article/details/82053259
3. int()函数
https://blog.csdn.net/TCatTime/article/details/82826824
4. print()函数
https://blog.csdn.net/TCatTime/article/details/83450692
5. str()函数
https://blog.csdn.net/TCatTime/article/details/82963437
测试用例
1. json文件中日期格式正常:
json格式如下:
{
"day1": "1949.10.01",
"day2": "2019.04.25"
}
python脚本执行结果:
25408
即1949年10月1日与2019年4月25日间隔了25408天。
2. json文件中只有年和月,没有日(day)
json文件如下:
{
"day1": "1949.10",
"day2": "2019.04.25"
}
python脚本执行如下:可以看出程序抛出并捕获了自定义异常TimeFormatError,并将其错误堆栈打出。
Time format(yyyy.mm.dd) error. 1949.10
errmsg:
Traceback (most recent call last):
File "/Users/Desktop/Python Apps/untitled_test/day_compute.py", line 67, in <module>
day = days_compute(base)
File "/Users/Desktop/Python Apps/untitled_test/day_compute.py", line 25, in days_compute
raise TimeFormatError("Time format(yyyy.mm.dd) error. %s" % time1)
TimeFormatError: Time format(yyyy.mm.dd) error. 1949.10
3. 日期错误。
日期错误。例如输入的是1000年13月1日(当然不存在这个日期)。
json文件如下:
{
"day1": "1000.13.1",
"day2": "2019.04.25"
}
python执行结果如下:
month must be in 1..12
errmsg:
Traceback (most recent call last):
File "/Users/Desktop/Python Apps/untitled_test/day_compute.py", line 67, in <module>
day = days_compute(base)
File "/Users/Desktop/Python Apps/untitled_test/day_compute.py", line 29, in days_compute
date1 = parse(time1)
File "/Users/Desktop/Python Apps/untitled_test/day_compute.py", line 46, in parse
return datetime.date(int(year), int(month), int(day))
ValueError: month must be in 1..12
代码捕获到python内置异常ValueError(46行的parse函数内所抛出),指出日期有误。
内容总结
以上是互联网集市为您收集整理的日期天数差计算(Python)全部内容,希望文章能够帮你解决日期天数差计算(Python)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。