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