ChatGPT4实现前一天
软件测试作业,用ChatGPT4来帮个小忙,小划水,勿喷勿喷,近期有相关作业的同学看到我的文章,建议修改一下,别撞车了,哈哈哈~
提出需求
个人输入需求: Java实现键盘输入日期 输出前一天,需要考虑润年和非润年,2月是否有29号,大月小月的区分等细节处理,不符合的有对应提示,不使用java包里的封装好的类
ChatGPT4分析出的语义:实现了输入日期输出前一天,并且考虑了闰年和非闰年、2月的天数、大月和小月等细节处理。如果输入的日期格式不正确,会有对应的提示。
代码实现
import java.util.Scanner;
public class TheDayBefore {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个日期(格式:yyyy-MM-dd):");
String inputString = scanner.nextLine();
String[] inputArray = inputString.split("-");
int year, month, day;
if (inputArray.length == 3) {
try {
year = Integer.parseInt(inputArray[0]);
month = Integer.parseInt(inputArray[1]);
day = Integer.parseInt(inputArray[2]);
} catch (NumberFormatException e) {
System.out.println("日期格式不正确!");
return;
}
if (month < 1 || month > 12) {
System.out.println("月份不正确!");
return;
}
if (day < 1 || day > 31) {
System.out.println("日期不正确!");
return;
}
if ((day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) ||
(day >= 30 && month == 2) ||
(day == 29 && month == 2 && !isLeapYear(year)) ||
(year < 0)) {
System.out.println("日期不正确!");
return;
}
int prevYear = year;
int prevMonth = month;
int prevDay = day - 1;
if (prevDay == 0) {
prevMonth--;
if (prevMonth == 0) {
prevYear--;
prevMonth = 12;
}
if (prevMonth == 2) {
if (isLeapYear(prevYear)) {
prevDay = 29;
} else {
prevDay = 28;
}
} else {
if (prevMonth == 4 || prevMonth == 6 || prevMonth == 9 || prevMonth == 11) {
prevDay = 30;
} else {
prevDay = 31;
}
}
}
System.out.println("前一天是:" + prevYear + "-" + formatMonth(prevMonth) + "-" + formatDay(prevDay));
} else {
System.out.println("日期格式不正确!");
}
}
private static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
private static String formatMonth(int month) {
if (month < 10) {
return "0" + month;
} else {
return String.valueOf(month);
}
}
private static String formatDay(int day) {
if (day < 10) {
return "0" + day;
} else {
return String.valueOf(day);
}
}
}
需求分析
过于划水,不太行,还是得简单分析一下需求叭,哈哈哈~
- 首先将目标定义为java,从年开始划分,判断输入的年是否为闰年:为闰年则对于二月这个特殊月,闰年为29天,平年为28天。例如输入2023-02-28是正确的,因为2023年为平年。
- 输入的月份月大还是月小,若是月大则除去二月以外,月大有31天,月小有30天。例如输入2023-04-01,前一天month=month-1,day=31。
- 输入的月是否为三月,若是三月例如2023-03-01(平年)前一天month = month-1;润年类似。
- 输入的月份是否是1月,例如2023-01-01则前一天为2022-12-31
及year = year - 1,month = 12,day = 31。
单元测试
1.测试输入的月份月大还是月小。

2.判断输入的年是否为闰年和输入的月是否为三月。

3.输入的月份是否是1月。

等价类划分
M1={月份:4、6、9、11}
M2={月份:1、3、5、7、8、10、12}
M3={月份:2}
D1={日期:1}
D2={日期:2<=日期<=27}
D3={日期:28}
D4={日期:29}
D5={日期:30}
D6={日期:31}
Y1={年:是闰年}
Y2={年:不是闰年}
决策表
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 月份在 | M2 | M3 | M3 | M2 | M1 | M1 | M3 | M2 | M1 | M4 | M4 |
| 日期在 | D1 | D4 | D3 | D1 | D1 | D1 | D1 | D2-D6 | D2-D5 | D1 | D1 |
| 年份在 | Y1 | Y2 | Y1 | Y2 | |||||||
| year-1 | √ | ||||||||||
| moth-1 | √ | √ | √ | ||||||||
| day-1 | √ | √ | √ | √ | |||||||
| year复位12 | √ | ||||||||||
| moth复位12 | √ | ||||||||||
| day复位31 | √ | √ | √ | √ | |||||||
| day复位30 | √ | √ | |||||||||
| day复位28 | √ | ||||||||||
| day复位29 | √ |
ChatGPT4实现前一天的更多相关文章
- PHP 取前一天或后一天、一个月时间
//获得当前时间 //date()格式化时间返回String类型. date("Y-m-d H:i:s") $current_date = date(’Y-m-d’ ...
- 【python】datetime获取日期,前一天日期
1.获取字符串型当前日期 2016-10-09格式 import datetime today = datetime.date.today() #datetime.date类型当前日期 str_tod ...
- MySql取得日期(前一天、某一天)
在测试一个统计表格,发现每次手写一个地址实在很烦,干脆就搞个自动计算好时间区间的东西.以下内容作为收获吧! 取得当天: SELECT curdate(); mysql> SELECT curda ...
- 如何利用java得到当前的时间和前一天的时间
1.得到当前的时间 Calendar cal = Calendar.getInstance(); String time=formatter.format(cal.getTime()); ...
- [python实用代码片段]python获取当前时间的前一天,前一周,前一个月
python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...
- [MySQL] 按日期进行统计(前一天、本周、某一天)
在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time统计当天 sql语句为: select * from user where date(log_time ...
- Extjs4 获取到前一天的日期
Extjs4 获取到前一天的日期 Extjs官方示例 Ext.Date add( date, interval, value ) : Date Provides a convenient method ...
- 定时每天执行前一天的数据导入oracle
#!/bin/bash export LANG="en_US.UTF-8" #设定时间变量,为前一天时间 log_date=`date +%Y-%m-%d -d "-1 ...
- mysql根据时间查询前一天数据
MySql数据库如何根据时间查询前一天的数据?本文整理了几个解决方法,有需要的朋友参考下. 本节内容:用MySql怎么根据时间查询前一天的数据. 例1: 代码示例: select * from t ...
- DateTime.IsLeapYear 方法判断是否是闰年,DaysInMonth判断一个月有几天,Addday取得前一天的日期GetYesterDay
一:DateTime.IsLeapYear 方法判断是否是闰年 二:代码 using System; using System.Collections.Generic; using System.Co ...
随机推荐
- C#MSDN简体中文 最后一版本 2007年的
我在学习C# 需要 先看 MSDN文档,英文看的很吃力,就找了好久 MSDN简体中文版本的: 因为微软已经关闭网站(MSDN中文的链接),我找到的就是 磁力链接的: 我分享出来 ,有需要的 自行下载 ...
- CSS 常用样式-文本属性
文本类样式我们已经学习过颜色 color 属性,严格来说行高 line-height 也是文本类属性,由于其可以合写在 font 属性中个,暂时先归类到字体中学习,接下来还有几个常用的文本属性. 水平 ...
- SelectionSort,选择排序,C++实现
1 // g++ selection_sort.cc -Wall -O3 -std=c++11 && ./a.exe 2 3 4 #include <iostream> 5 ...
- Linux CentOS Docker 安装、加载配置
Docker Version:2.10.2 OS: CentOS 7 1.卸载 $ sudo yum remove docker \ docker-client \ docker-client-lat ...
- [C#]协变Covariance案例
协变参考代码1: using System; using System.Collections.Generic; using System.Linq; namespace CovarianceSoOn ...
- Nginx版本。
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- revit添加扩展组件
revit 添加组件方法: 查找本地这个地址: C:\Users\用户名\AppData\Roaming\Autodesk\Revit\Addins\2018 下载网上找到的插件,一般从github查 ...
- 将后端的application/json的格式数据类型转换成前端需要的类型格式
前提:后端返回的数据内容 但是红框的数据对于前端来说是不正确的数据 所以我感觉前端处理这个数据本身这个操作都很傻X 但是我尝试进行转换代码如下: 得到的数据: 点击查看代码 const interfa ...
- input_subsys 输入子系统框架分析
在linux内核中 已做好各类驱动的框架,驱动程序也属于内核的一部分,我们可以在原有的驱动上修改,来匹配我们自已的硬件,也可以自已编写符合内核驱动框架的驱动程序.出于学习的目的,便于更好的理解各类驱动 ...
- Apache Ranger系列九:修改源码支持URI类型为s3的操作
问题描述:ranger在checkPrivileges(org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizer)时,当 ...