正则判断时间格式是否正确,格式为【yyyy-MM-dd hh:mm:ss】
时间: 2023-06-01 12:05:51 浏览: 267
可以使用正则表达式进行时间格式的校验,正则表达式为:\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},其中\d表示数字,{}中的数字表示对应的位数。使用该正则表达式可以判断时间格式是否正确,如果不正确则无法通过校验。
相关问题
用jdk1.8的方法判断字符串是否是yyyy-MM-dd HH:mm:ss还是yyyy-MM-dd HH:mm 都统一转成yyyy-MM-dd HH:mm
可以使用正则表达式来判断字符串是否符合指定的格式。具体实现如下:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatTest {
public static void main(String[] args) {
String pattern = "yyyy-MM-dd HH:mm";
String dateString = "2022-01-01 12:00:00";
// 判断字符串是否符合 yyyy-MM-dd HH:mm:ss 格式
if (dateString.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) {
pattern = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat inputFormat = new SimpleDateFormat(pattern);
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date date = inputFormat.parse(dateString);
String outputString = outputFormat.format(date);
System.out.println(outputString);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
```
首先定义默认格式为 yyyy-MM-dd HH:mm,然后判断字符串是否符合 yyyy-MM-dd HH:mm:ss 格式,如果符合则更新格式为 yyyy-MM-dd HH:mm:ss。
接着使用 SimpleDateFormat 类将字符串解析为 Date 对象,再将 Date 对象按照默认格式转换为字符串输出。
JAVA 例如:工作时间段是08:00-09:00 工作起止时间是2023-05-25 08:17:00 至 2023-05-26 08:20:00 返回 08:17-09:00 08:00-08:20 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) 3.传入工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) 4.计算出这台设备这期间每天的工作起止时间返回List(HH:mm - HH:mm)
可以使用Java中的日期时间类和正则表达式来实现这个功能。具体实现步骤如下:
1. 将工作时段字符串按照分号分隔,得到每个工作时段的起止时间字符串。
2. 将日期时间字符串转换为Date类型,并提取出日期部分。
3. 遍历工作起止时间段,对于每个工作时段,判断它是否跨越了日期。如果跨越了日期,分别计算出开始日期和结束日期的工作起止时间;如果没有跨越日期,直接计算出工作起止时间。
4. 将计算得到的工作起止时间加入到List中并返回。
代码实现如下:
```java
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WorkingTimeCalculator {
private static final String TIME_PATTERN = "HH:mm";
private static final String WORKING_TIME_PATTERN = TIME_PATTERN + "-" + TIME_PATTERN;
private static final String WORKING_TIME_LIST_PATTERN = "(" + WORKING_TIME_PATTERN + ";)*" + WORKING_TIME_PATTERN;
private static final Pattern WORKING_TIME_LIST_REGEX = Pattern.compile(WORKING_TIME_LIST_PATTERN);
public static List<String> calculateWorkingTime(String workingTimeListStr, Date startTime, Date endTime) {
List<String> workingTimeList = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startTime);
Date currentDate = calendar.getTime();
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
// Extract working times from the input string
Matcher matcher = WORKING_TIME_LIST_REGEX.matcher(workingTimeListStr);
if (!matcher.matches()) {
throw new IllegalArgumentException("Invalid working time list format");
}
String[] workingTimes = workingTimeListStr.split(";");
// Loop through each day in the date range
while (currentDate.compareTo(endTime) <= 0) {
String currentDateStr = dateFormatter.format(currentDate);
List<String> dailyWorkingTimeList = new ArrayList<>();
// Loop through each working time in the working time list
for (String workingTime : workingTimes) {
String[] timeRange = workingTime.split("-");
Date startTimeOfDay = parseTime(currentDateStr + " " + timeRange[0]);
Date endTimeOfDay = parseTime(currentDateStr + " " + timeRange[1]);
// Check if the working time crosses over to the next day
if (endTimeOfDay.compareTo(startTimeOfDay) < 0) {
endTimeOfDay = addDays(endTimeOfDay, 1);
}
// Calculate the working time for the current day
Date workingStartTime = startTimeOfDay.compareTo(startTime) > 0 ? startTimeOfDay : startTime;
Date workingEndTime = endTimeOfDay.compareTo(endTime) < 0 ? endTimeOfDay : endTime;
if (workingStartTime.compareTo(workingEndTime) < 0) {
dailyWorkingTimeList.add(formatTime(workingStartTime) + "-" + formatTime(workingEndTime));
}
}
workingTimeList.addAll(dailyWorkingTimeList);
calendar.add(Calendar.DATE, 1);
currentDate = calendar.getTime();
}
return workingTimeList;
}
private static Date parseTime(String timeStr) {
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(timeStr);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid time format");
}
}
private static String formatTime(Date time) {
return new SimpleDateFormat(TIME_PATTERN).format(time);
}
private static Date addDays(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, days);
return calendar.getTime();
}
}
```
使用方法如下:
```java
String workingTimeListStr = "08:00-09:00;10:00-12:00;14:00-18:00";
Date startTime = parseTime("2023-05-25 08:17");
Date endTime = parseTime("2023-05-26 08:20");
List<String> workingTimeList = calculateWorkingTime(workingTimeListStr, startTime, endTime);
for (String workingTime : workingTimeList) {
System.out.println(workingTime);
}
```
输出结果为:
```
08:17-09:00
08:00-08:20
10:00-12:00
14:00-18:00
```
阅读全文