日拱一卒:日期处理
2023-02-27 本文已影响0人
Tinyspot
1. 时间处理
1.1 默认时间格式
public class DateUtil {
@Test
public void test() {
System.out.println(parseDateTime(new Date()));
System.out.println(parseDate(new Date()));
System.out.println(parseToDateTime("2023-01-06 22:34:55"));
System.out.println(parseToDate("2023-01-06"));
}
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static String parseDate(Date date) {
return parseDateByFormat(date, DEFAULT_DATE_FORMAT);
}
public static String parseDateTime(Date date) {
return parseDateByFormat(date, DEFAULT_DATE_TIME_FORMAT);
}
private static String parseDateByFormat(Date date, String dateFormat) {
if (date == null) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
return format.format(date);
}
public static Date parseToDate(String date) {
return parseToDateByFormat(date, DEFAULT_DATE_FORMAT);
}
public static Date parseToDateTime(String date) {
return parseToDateByFormat(date, DEFAULT_DATE_TIME_FORMAT);
}
private static Date parseToDateByFormat(String date, String dateFormat) {
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
try {
return format.parse(date);
} catch (ParseException e) {
return null;
}
}
}
当天: 00:00:00 ~ 23:59:59
public static final String DEFAULT_START_TIME_PATTERN = "yyyy-MM-dd 00:00:00";
public static final String DEFAULT_END_TIME_PATTERN = "yyyy-MM-dd 23:59:59";
1.2 时间戳处理
public class Demo {
@Test
public void test() {
Date date = new Date();
System.out.println(timeStampToDateTime(date.getTime()));
}
/**
* 时间戳转为时间格式
*
* @param value 时间戳,比如 1673015695603
* @return 比如 2023-01-06 22:34:55
*/
public static String timeStampToDateTime(Long value) {
if (value == null) {
return null;
}
Date date = new Date(value);
return parseDateTime(date);
}
public static String timeStampToDateTime(String value) {
if (StringUtils.isEmpty(value)) {
return null;
}
try {
Date date = new Date(Long.parseLong(value));
return parseDateTime(date);
} catch (Exception e) {
return null;
}
}
}
2. 日期计算
2.1 Calendar 属性
| 属性 | 描述 |
|---|---|
| YEAR | |
| MONTH | JANUARY is 0 |
| WEEK_OF_YEAR | |
| WEEK_OF_MONTH | |
| DATE | The first day of the month has value 1 |
| DAY_OF_MONTH | |
| DAY_OF_YEAR | |
| DAY_OF_WEEK | |
| HOUR | the 12-hour clock (0 - 11) |
| HOUR_OF_DAY | the 24-hour clock |
| MINUTE | |
| SECOND | |
| MILLISECOND | E.g., at 10:04:15.250 |
public static final Long ONE_HOUR_MILLISECONDS = 60 * 60 * 1000L;
public static final Long ONE_DAY_SECONDS = 24 * 60 * 60L;
public static final Long ONE_DAY_MILLISECONDS = 24 * 60 * 60 * 1000L;
public static final Long ONE_LIFE = 100L * 365 * 24 * 60 * 60 * 1000;
2.2 基础操作
@Test
public void test() {
Calendar calendar = Calendar.getInstance();
// get(...) 获取时间
Date time = calendar.getTime();
System.out.println(calendar.getTime().toLocaleString());
System.out.println(calendar.getTimeInMillis());
int year = calendar.get(Calendar.YEAR);
// 月份从 0 开始,要 +1
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);
// set(...) 修改时间
calendar.set(Calendar.DATE, 5);
System.out.println(calendar.getTime().toLocaleString());
}
打印结果:
2023-2-28 14:42:32
1677566552943
2023-2-28 14:42:32
2023-2-5 14:42:32
2.3 日期加减
@Test
public void test2() {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString());
calendar.add(Calendar.DATE, 3);
System.out.println(calendar.getTime().toLocaleString());
calendar.add(Calendar.HOUR_OF_DAY, 1);
System.out.println(calendar.getTime().toLocaleString());
calendar.add(Calendar.MINUTE, 10);
System.out.println(calendar.getTime().toLocaleString());
}
打印结果:
2023-2-28 14:52:56
2023-3-3 14:52:56
2023-3-3 15:52:56
2023-3-3 16:02:56
2.4 重置当天时间
@Test
public void test3() {
Calendar calendar = Calendar.getInstance();
System.out.println("minute: " + calendar.get(Calendar.MINUTE));
System.out.println(fillPrefix(calendar.get(Calendar.HOUR_OF_DAY)) + ":" + fillPrefix(calendar.get(Calendar.MINUTE)));
// 当天时间重置
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
System.out.println(calendar.getTime().toLocaleString());
}
private String fillPrefix(int time) {
// 24小时制是两位数,不够左边补0
if (time < 10) {
return "0" + time;
}
return String.valueOf(time);
}
打印结果:
minute: 1
15:01
2023-2-28 0:00:00