| 字符 | 描述 | 示例 | 
|---|---|---|
| [abc] | 匹配 […] 中所有字符 | [hlo] 匹配字符串 "hello world" 中所有的 h l o 字母 | 
| [^ABC] | 匹配除了 […] 中所有字符 | [hlo] 匹配字符串 "hello world" 中除了 h l o 的所有字母 | 
| [^a-z] | 匹配除了 […] 中所有字符 | [hlo] 匹配字符串 "hello world" 中除了 a 到 z 的所有字母 | 
| [A-Z] | [A-Z] 表示一个区间,匹配所有的大写字母 | [A-Z] 匹配字符串 "Hello world" 结果为 H | 
| 字符 | 描述 | 示例 | 
|---|---|---|
| . | 匹配任意单个字符,除了换行符 | a.b、1.2 | 
| * | 匹配前一个字符零次或多次 | go*gle、colou*r | 
| + | 匹配前一个字符一次或多次 | go+gle、colou+r | 
| ? | 匹配前一个字符零次或一次 | colou?r、col(o)?r | 
| | | 表示“或”的意思,用于匹配多个选项中的一个 | apple|orange、yes|no | 
| [] | 用于定义字符类,匹配方括号内的任意一个字符 | [aeiou]、[0-9] | 
| () | 用于分组,可以改变默认的优先级和应用限定符 | (go)+、(abc|def) | 
| $ | 匹配输入字符串的结尾位置,如果设置了 RepExp 对象的 Multiline 属性,则 $ 也匹配‘\n’或‘\r’ | … | 
| { | 标记限定表达式的开始 | … | 
| | | 指明两项直接的一个选择 | … | 
| 字符 | 描述 | 示例 | 
|---|---|---|
| \n | 匹配换行符 | Hello\nWorld | 
| \r | 匹配回车符 | Hello\rWorld | 
| \t | 匹配制表符 | Hello\tWorld | 
| \v | 匹配垂直制表符 | Hello\vWorld | 
| \s | 匹配任意空白字符,包括空格、制表符、换页符等 | Hello World | 
| \S | 匹配任意非空白字符,不包括换行 | 我暂时不知道 | 
| \d | 匹配任意数字字符,相当于 [0-9] | 12345、9am | 
| \w | 匹配任意字母、数字或下划线字符,相当于 [a-zA-Z0-9_] | hello_world_123 | 
| 字符 | 描述 | 示例 | 
|---|---|---|
| * | 匹配前一个字符零次或多次 | go*gle、colou*r | 
| + | 匹配前一个字符一次或多次 | go+gle、colou+r | 
| ? | 匹配前一个字符零次或一次 | colou?r、col(o)?r | 
| {n} | 匹配前一个字符恰好出现 n 次 | go{2}gle、colou{3}r | 
| {n,} | 匹配前一个字符至少出现 n 次 | go{2,}gle、colou{3,}r | 
| {n,m} | 匹配前一个字符出现 n 到 m 次 | go{2,5}gle、colou{3,7}r | 
| 字符 | 描述 | 示例 | 
|---|---|---|
| ^ | 匹配字符串的开头 | ^Hello、^[A-Z] | 
| $ | 匹配字符串的结尾 | World$、[0-9]$ | 
| \b | 匹配单词的边界 | \btest\b、\bword\b | 
| \B | 匹配非单词边界 | \Btest\B、\Bword\B | 
Date类位于 java.util 包中,用于表示特定的时间点。
| 方法 | 描述 | 
|---|---|
| getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。 | 
| toString() | 将日期对象转换为字符串形式。 | 
| compareTo(Date anotherDate) | 比较两个日期的顺序。返回值为 0 表示相等,大于 0 表示当前日期在参数日期之后,小于 0 表示当前日期在参数日期之前。 | 
| equals(Object obj) | 检查该日期对象是否等于另一个日期对象。 | 
| before(Date when) | 检查当前日期是否在指定日期之前。 | 
| after(Date when) | 检查当前日期是否在指定日期之后。 | 
| setTime(long time) | 设置日期对象的时间值。 | 
例题1 : Date使用
public class DateDemo01 {
    public static void main(String[] args) {
        // 创建一个表示当前时间的 Date 对象
        Date date = new Date();
        System.out.println(date);   // Thu Aug 24 22:35:10 CST 2023
        // 获取 Date 对象的时间(毫秒数)
         long timeInMillis = date.getTime();
        System.out.println(timeInMillis);  // 1692887710157
        // 创建一个指定时间的 Date 对象
        Date specifiedDate = new Date(1640886000000L);
        System.out.println(specifiedDate);  // Fri Dec 31 01:40:00 CST 2021
        // 比较两个 Date 对象的时间
        boolean isBefore = date.before(specifiedDate);
        boolean isEquals = date.equals(specifiedDate);
        boolean isAfter = date.after(specifiedDate);
        System.out.println(isBefore);  // false
        System.out.println(isEquals);  // false
        System.out.println(isAfter);  // true
    }
}
 
Calender 类是 java 中用于处理日期和时间的类,位于 java.util 包中。它提供了一种比 Date 类更灵活和功能更强大的日期和时间操作方式。
| 方法 | 描述 | 
|---|---|
| getTime() | 返回一个表示此 Calendar 时间值(从历元到现在毫秒偏移量)的 Date 对象。 | 
| get(int field) | 返回给定日历字段的值。 | 
| set(int field, int value) | 设置给定日历字段的值。 | 
| add(int field, int amount) | 根据日历的规则,将指定的时间量添加到给定日历字段。 | 
| roll(int field, int amount) | 根据日历的规则,将给定的时间量添加到给定日历字段,但不更改较大的字段值。 | 
| getActualMaximum(int field) | 返回指定日历字段的最大值。 | 
| getActualMinimum(int field) | 返回指定日历字段的最小值。 | 
| getDisplayName(int field, int style, Locale locale) | 返回给定字段值的本地化表示名称。 | 
| getFirstDayOfWeek() | 返回一个代表每周的第一天的值。 | 
| setFirstDayOfWeek(int value) | 设置一星期中的第一天是哪一天。 | 
| getMinimum(int field) | 返回给定日历字段的最小值。 | 
| getMaximum(int field) | 返回给定日历字段的最大值。 | 
例题2 : Calender使用
import java.util.Calendar;
import java.util.Date;
public class CalenderDemo01 {
    public static void main(String[] args) {
        // 获取当前时间和日期的 Calender 对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);  // java.util.GregorianCalendar[time=1692889224235,areFieldsSet=true,···]
        // 设置日期为指定的年份、月份和日 1970年2月1日
        calendar.set(1970, 1, 1);
        System.out.println(calendar);  // java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllField···]
        // 获取年份
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);  // 1970
        // 获取月份(月份从 0 开始计数)
        int month = calendar.get(Calendar.MONTH) + 1;
        System.out.println(month);  // 2
        // 获取当前月份中的第几天
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(dayOfMonth);  // 1
        // 月份加 1
        calendar.add(Calendar.MONTH, 1);
        // 输出修改过后的月份
        System.out.println(calendar.getTime());  // Sun Mar 01 23:00:24 CST 1970
        // 将 Calender 转换为 Date 对象
        Date date = calendar.getTime();
        System.out.println(date);  // Sun Mar 01 23:00:24 CST 1970
    }
}
 
Calender 和 Date 相互转换
import java.util.Calendar;
import java.util.Date;
public class CalenderDeom02 {
    // 创建一个 Calender 对象
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 设置日期为指定的日期
        calendar.set(1970, 0, 1);
        // 获取当前的日期和时间
        Date date = calendar.getTime();
        System.out.println(date);  // Thu Jan 01 23:25:45 CST 1970
        // 将 Calender 转换为 Date
        Date convertedDate = calendar.getTime();
        System.out.println(convertedDate);  // Thu Jan 01 23:25:45 CST 1970
        // 创建一个新的 Date 对象
        Date newDate = new Date(70, 1, 1);
        // 将 Date 转换为 Calender 
        Calendar convertedCalender = Calendar.getInstance();
        convertedCalender.setTime(newDate);
        System.out.println(convertedCalender);  // java.util.GregorianCalendar[time=2649600000,areFieldsSet=true,areAllFieldsSet=true...
    }
}
 
请注意,尽管 Date 类和 Calendar 类仍然存在于 Java 中,但在 Java 8 及更高版本中,推荐使用新版的日期时间类(如 LocalDate、LocalTime、LocalDateTime)来替代旧版的 Date 和 Calendar 类,因为新版的类更加简洁、易用,并且线程安全。
SimpleDateFormat 类是 Java 中用于日期和时间格式化的类,它位于 java.text 包中。它允许将 Date 对象格式化为指定的日期和时间字符串,或将日期和时间字符串解析为 Date 对象。
| 方法 | 描述 | 
|---|---|
| SimpleDateFormat(String pattern) | 使用指定的日期模式创建一个 SimpleDateFormat 对象。 | 
| String format(Date date) | 将给定的 Date 对象格式化为字符串,使用 SimpleDateFormat 的日期模式。 | 
| Date parse(String source) | 将给定的字符串解析为 Date 对象,使用 SimpleDateFormat 的日期模式。 | 
| void setLenient(boolean lenient) | 设置解析过程是否宽松,即是否严格遵循日期格式。 | 
| String toPattern() | 返回当前日期模式。 | 
| void applyPattern(String pattern) | 使用给定的日期模式更新当前日期模式。 | 
| DateFormatSymbols getDateFormatSymbols() | 获取与该日期格式化程序相关联的 DateFormatSymbols 对象,用于获取或设置本地化信息(如月名、星期几名等)。 | 
| void setDateFormatSymbols(DateFormatSymbols newFormatSymbols) | 设置与该日期格式化程序相关联的 DateFormatSymbols 对象,用于设置本地化信息(如月名、星期几名等)。 | 
例题3 :SimpleDateFormatExample使用
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建 SimpleDateFormat 对象,并指定格式化模式,默认2023/8/25 上午10:59
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm:ss:SSS");
        // 格式化 Date 对象为字符串
        String formatDate = sdf.format(date);
        System.out.println(formatDate);  // 2023-08-25 上午 11:02:59:178
        // 解析字符串为 Date 对象
        String dateString = "1949-10-01 下午 3:30:45:123";
        try {
            Date parsedDate = sdf.parse(dateString);
            System.out.println(parsedDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
LocalDate 是 Java 中的一个日期类,它提供了处理日期的方法和功能。LocalDate 类位于 java.time 包中,从 JDK 8 引入。LocalDate 是不可变类型,final 修饰储存值的数组。
| 方法 | 描述 | 
|---|---|
| static LocalDate now() | 返回当前日期。 | 
| static LocalDate of(int year, int month, int dayOfMonth) | 根据指定的年、月、日创建一个 LocalDate 对象。 | 
| int getYear() | 获取日期中的年份。 | 
| Month getMonth() | 获取日期中的月份,返回一个 Month 枚举对象。 | 
| int getDayOfMonth() | 获取日期中的月份中的天数。 | 
| DayOfWeek getDayOfWeek() | 获取日期中的星期几,返回一个 DayOfWeek 枚举对象。 | 
| LocalDate plusDays(long daysToAdd) | 返回当前日期加上指定天数后的日期。 | 
| LocalDate minusDays(long daysToSubtract) | 返回当前日期减去指定天数后的日期。 | 
| boolean isBefore(LocalDate other) | 检查当前日期是否在另一个日期之前。 | 
| boolean isAfter(LocalDate other) | 检查当前日期是否在另一个日期之后。 | 
| boolean isEqual(LocalDate other) | 检查当前日期是否等于另一个日期。 | 
| String format(DateTimeFormatter formatter) | 将日期格式化为指定的字符串格式。 | 
例题4 : LocalDate使用
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
public class LocalDateDemo01 {
    public static void main(String[] args) {
        // 创建 LocalDate 对象
        LocalDate today = LocalDate.now();  // 当前日期创建对象
        System.out.println(today);  // 2023-08-25
        LocalDate specificDate = LocalDate.of(1970, 1, 1);  // 指定日期创建对象
        System.out.println("specificDate" + specificDate);  // 1970-01-01
        // 解析字符串为 LocalDate 对象
        LocalDate parseDate = LocalDate.parse("1949-10-01");
        System.out.println("parseDate" + parseDate);  // 1949-10-01
        // 获取日期信息
        int year = today.getYear();
        System.out.println("年份" + year);  // 年份2023
        Month month = today.getMonth();
        System.out.println("月份" + month);  // AUGUST
        int mon = today.getMonthValue();
        System.out.println("月份" + mon);  // 8
        int day = today.getDayOfYear();  // 一年中的第几天
        System.out.println(day);  // 237
        int day1 = today.getDayOfMonth();  // 当月的第多少天
        System.out.println(day1);  // 25
        // 增加、减少日期
        LocalDate futureDate = specificDate.plusDays(7);
        System.out.println("增加日期:" + futureDate);  // 增加日期:1970-01-08
        LocalDate pastDate = specificDate.minusMonths(1);
        System.out.println("减少日期:" + pastDate);  // 减少日期:1969-12-01
        // 判定日期关系
        boolean isBefore = specificDate.isBefore(parseDate);
        System.out.println(isBefore);  // false
        boolean isAfter = specificDate.isAfter(parseDate);
        System.out.println(isAfter);  // true
        boolean isEqual = specificDate.isEqual(parseDate);
        System.out.println(isEqual);  // false
        // 格式化日期
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String fomattedDate = specificDate.format(formatter);
        System.out.println("格式化后的日期" + fomattedDate);  // 格式化后的日期1970-01-01
    }
} 
 
Date 和 LocalDate 相互转换
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class DateLocalDateConversionExample {
    public static void main(String[] args) {
        //将Date对象转换为LocalDate对象
        Date date = new Date();
        LocalDate localDate = dateToLocalDate(date);
        System.out.println(localDate);
        // 将LocalDate对象转换为Date对象
        LocalDate localDate1 = LocalDate.of(1970, 1, 1);
        Date convertedDate = localDatetoDate(localDate1);
        System.out.println(convertedDate);
    }
    // 将LocalDate对象转换为Date对象
    private static Date localDatetoDate(LocalDate localDate1) {
        ZoneId zoneId = ZoneId.systemDefault();
        return Date.from(localDate1.atStartOfDay(zoneId).toInstant());
    }
    // 将Date对象转换为LocalDate对象
    private static LocalDate dateToLocalDate(Date date) {
        ZoneId zoneId = ZoneId.systemDefault();
        return date.toInstant().atZone(zoneId).toLocalDate();
    }
}
 
LocalTime 是 Java 中的一个时间类,它提供了处理时间的方法和功能。LocalDate 类位于 java.time 包中,从 JDK 8 引入。LocalTime 是不可变类型,final 修饰储存值的数组。
| 方法 | 描述 | 
|---|---|
| static LocalTime now() | 返回当前时间。 | 
| static LocalTime of(int hour, int minute) | 根据指定的小时和分钟创建一个 LocalTime 对象。 | 
| int getHour() | 获取时间中的小时数。 | 
| int getMinute() | 获取时间中的分钟数。 | 
| int getSecond() | 获取时间中的秒数。 | 
| LocalTime plusHours(long hoursToAdd) | 返回当前时间加上指定小时数后的时间。 | 
| LocalTime minusHours(long hoursToSubtract) | 返回当前时间减去指定小时数后的时间。 | 
| LocalTime plusMinutes(long minutesToAdd) | 返回当前时间加上指定分钟数后的时间。 | 
| LocalTime minusMinutes(long minutesToSubtract) | 返回当前时间减去指定分钟数后的时间。 | 
| LocalTime plusSeconds(long secondsToAdd) | 返回当前时间加上指定秒数后的时间。 | 
| LocalTime minusSeconds(long secondsToSubtract) | 返回当前时间减去指定秒数后的时间。 | 
| boolean isBefore(LocalTime other) | 检查当前时间是否在另一个时间之前。 | 
| boolean isAfter(LocalTime other) | 检查当前时间是否在另一个时间之后。 | 
| boolean isEqual(LocalTime other) | 检查当前时间是否等于另一个时间。 | 
| String format(DateTimeFormatter formatter) | 将时间格式化为指定的字符串格式。 | 
例题5 : LocalTime使用
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class LocalTimeDemo01 {
    public static void main(String[] args) {
        // 创建 LocalTime 对象
        LocalTime now = LocalTime.now();
        System.out.println("当前时间" + now);  // 当前时间19:56:31.828827500
        LocalTime specificTime = LocalTime.of(14, 30);
        System.out.println("指定时间" + specificTime);  // 指定时间14:30
        // 解析字符串为 loCalTime 对象
        LocalTime parsedTime = LocalTime.parse("08:45:30");
        System.out.println("解析后的时间" + parsedTime);  // 解析后的时间08:45:30
        // 获取时间信息
        int hour = now.getHour();
        System.out.println("小时数" + hour);  // 小时数19
        int minute = now.getMinute();
        System.out.println("分钟数" + minute);  // 分钟数56
        int second = now.getSecond();
        System.out.println("秒数" + second);  // 秒数31
        // 增加、减少时间
        LocalTime futureTime = now.plusHours(3);
        System.out.println("未来时间:" + futureTime);  // 未来时间:22:56:31.828827500
        LocalTime pastTime = now.minusMinutes(15);
        System.out.println("过去时间:" + pastTime);  // 过去时间:19:41:31.828827500
        // 判定时间关系
        boolean isBefore = now.isBefore(specificTime);
        System.out.println(isBefore);  // false
        boolean isEqusl = pastTime.equals(futureTime);
        System.out.println(isEqusl);  // false
        boolean isAfter = pastTime.isAfter(futureTime);
        System.out.println(isAfter);  // false
        // 格式化时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String formattedTime = now.format(formatter);
        System.out.println(formattedTime);  // 19:56:31
    }
}
 
在判定日期时间关系中,日期是否相等为 isEqual() ,时间为 equals() 。
LocalDateTime 是 Java 中的一个日期时间类,LocalDate 类位于 java.time 包中,从 JDK 8 引入。它结合了 LocalDate 和 LocalTime 的功能,用于表示日期和时间的组合。
| 方法 | 描述 | 
|---|---|
| static LocalDateTime now() | 返回当前日期和时间。 | 
| static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute) | 根据指定的年、月、日、小时和分钟创建一个 LocalDateTime 对象。 | 
| LocalDate toLocalDate() | 获取 LocalDateTime 对象中的日期部分,返回一个 LocalDate 对象。 | 
| LocalTime toLocalTime() | 获取 LocalDateTime 对象中的时间部分,返回一个 LocalTime 对象。 | 
| int getYear() | 获取日期时间中的年份。 | 
| Month getMonth() | 获取日期时间中的月份,返回一个 Month 枚举对象。 | 
| int getDayOfMonth() | 获取日期时间中的月份中的天数。 | 
| int getHour() | 获取时间中的小时数。 | 
| int getMinute() | 获取时间中的分钟数。 | 
| LocalDateTime plusDays(long daysToAdd) | 返回当前日期时间加上指定天数后的日期时间。 | 
| LocalDateTime minusDays(long daysToSubtract) | 返回当前日期时间减去指定天数后的日期时间。 | 
| LocalDateTime plusHours(long hoursToAdd) | 返回当前日期时间加上指定小时数后的日期时间。 | 
| LocalDateTime minusHours(long hoursToSubtract) | 返回当前日期时间减去指定小时数后的日期时间。 | 
| LocalDateTime plusMinutes(long minutesToAdd) | 返回当前日期时间加上指定分钟数后的日期时间。 | 
| LocalDateTime minusMinutes(long minutesToSubtract) | 返回当前日期时间减去指定分钟数后的日期时间。 | 
| LocalDateTime plusSeconds(long secondsToAdd) | 返回当前日期时间加上指定秒数后的日期时间。 | 
| LocalDateTime minusSeconds(long secondsToSubtract) | 返回当前日期时间减去指定秒数后的日期时间。 | 
| boolean isBefore(LocalDateTime other) | 检查当前日期时间是否在另一个日期时间之前。 | 
| boolean isAfter(LocalDateTime other) | 检查当前日期时间是否在另一个日期时间之后。 | 
| boolean isEqual(LocalDateTime other) | 检查当前日期时间是否等于另一个日期时间。 | 
| String format(DateTimeFormatter formatter) | 将日期时间格式化为指定的字符串格式。 | 
例题6 : LocalDateTime使用
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeDemo {
    public static void main(String[] args) {
        // 创建 LocalDateTime 对象
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime specificDateTime = LocalDateTime.of(1949, 10, 1, 14, 20);
        System.out.println("指定日期时间" + specificDateTime);  // 指定日期时间1949-10-01T14:20
        // 解析字符串为 LocalDateTime 对象
        LocalDateTime parsedDateTime = LocalDateTime.parse("1970-01-01T09:00:00");
        System.out.println("解析后的日期时间" + parsedDateTime);  // 解析后的日期时间1970-01-01T09:00
        // 获取日期时间信息
        LocalDate date = specificDateTime.toLocalDate();
        System.out.println("日期部分" + date);  // 日期部分1949-10-01
        int year = specificDateTime.getYear();
        System.out.println("年份" + year);  // 年份1949
        int minute = specificDateTime.getMinute();
        System.out.println("分钟数" + minute);  // 分钟数20
        // 减少、增加日期时间
        LocalDateTime futureDateTime = specificDateTime.plusDays(7).plusHours(3);
        System.out.println("增加日期时间" + futureDateTime);  // 增加日期时间1949-10-08T17:20
        // 判定日期时间关系
        boolean isEqual = parsedDateTime.isEqual(specificDateTime);
        System.out.println(isEqual);  // false
        // 格式化日期时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS");
        String formattedDateTime = parsedDateTime.format(formatter);
        System.out.println("格式化后的日期时间为" + formattedDateTime);  // 格式化后的日期时间为1970-01-01 09:00:00:000
    }
}
 上一篇:shell 正则表达式详解