Java字符串时分秒转成Date的实现
1. 整体流程
在将Java字符串表示的时分秒转换成Date对象的过程中,需要经历以下几个步骤:
步骤 | 描述 |
---|---|
1 | 将字符串解析为时、分、秒三个部分 |
2 | 校验时、分、秒的有效性,确保其在合法范围内 |
3 | 构建一个Date对象,并将时、分、秒设置到该对象中 |
4 | 校验Date对象的有效性,确保其表示的时间在合法范围内 |
5 | 返回转换后的Date对象 |
2. 实现步骤与代码示例
2.1 将字符串解析为时、分、秒三个部分
String timeString = "12:30:45";
String[] timeParts = timeString.split(":");
使用split
方法将时间字符串按照冒号进行分割,得到一个包含时、分、秒三个部分的字符串数组。
2.2 校验时、分、秒的有效性
int hour = Integer.parseInt(timeParts[0]);
int minute = Integer.parseInt(timeParts[1]);
int second = Integer.parseInt(timeParts[2]);
if (hour < 0 || hour > 23) {
throw new IllegalArgumentException("Invalid hour: " + hour);
}
if (minute < 0 || minute > 59) {
throw new IllegalArgumentException("Invalid minute: " + minute);
}
if (second < 0 || second > 59) {
throw new IllegalArgumentException("Invalid second: " + second);
}
将时、分、秒的字符串部分转换成整数,并进行有效性校验。如果任何一个部分不在合法范围内(时:0-23,分/秒:0-59),则抛出IllegalArgumentException
异常。
2.3 构建Date对象并设置时、分、秒
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
Date date = calendar.getTime();
使用Calendar
类构建一个日历对象,并将时、分、秒设置到该对象中。最后,通过getTime
方法获取对应的Date
对象。
2.4 校验Date对象的有效性
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
if (year < 1900 || year > 9999) {
throw new IllegalArgumentException("Invalid year: " + year);
}
if (month < Calendar.JANUARY || month > Calendar.DECEMBER) {
throw new IllegalArgumentException("Invalid month: " + month);
}
if (day < 1 || day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH)) {
throw new IllegalArgumentException("Invalid day: " + day);
}
使用Calendar
类重新设置Date对象,并将其年、月、日部分取出。对年份进行合法性校验(1900-9999),对月份进行合法性校验(JANUARY-DECEMBER),对日期进行合法性校验(1-最大天数)。如果任何一部分不在合法范围内,则抛出IllegalArgumentException
异常。
2.5 返回转换后的Date对象
return date;
将转换后的Date
对象返回。
3. 完整代码示例
import java.util.Calendar;
import java.util.Date;
public class TimeConverter {
public static Date convertTimeStringToDate(String timeString) {
String[] timeParts = timeString.split(":");
int hour = Integer.parseInt(timeParts[0]);
int minute = Integer.parseInt(timeParts[1]);
int second = Integer.parseInt(timeParts[2]);
if (hour < 0 || hour > 23) {
throw new IllegalArgumentException("Invalid hour: " + hour);
}
if (minute < 0 || minute > 59) {
throw new IllegalArgumentException("Invalid minute: " + minute);
}
if (second < 0 || second > 59) {
throw new IllegalArgumentException("Invalid second: " + second);
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
Date date = calendar.getTime();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar