Java中关于时间、日期的常见操作
主要涉及三个类:Date、Calendar、LocalDate/LocalTime/LocalDateTime类
参考:java Date 和 Calendar类 万字详解
1,Date日期操作
Date nowDate = new Date(); // 获取当前时间Date
// Date格式化为字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String today = sdf.format(nowDate); // 按照固定格式格式化对应字符串
System.out.println(today);
// 字符串解析为Date
String dateStr = "2022-4-23 12:03:36";
try {
Date date1 = sdf.parse(dateStr);
System.out.println(date1);
System.out.println(sdf.format(date1));
} catch (ParseException e) {
e.printStackTrace();
}
//以时间戳来给定一个特定时刻,初始化date
long currentTimeMillis = System.currentTimeMillis();
// Date date2 = new Date(1572960924868L);
Date date2 = new Date(currentTimeMillis);
System.out.println(sdf.format(date2));
// Date转为时间戳
long time = date2.getTime();
System.out.println(time);
// Date的时区转换问题
// CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间(4个不同时区), GMT(Greenwich Mean Time)代表格林尼治标准时间
// 通过 Java 获取的CST时间用的是China Standard Time
Date date = new Date();
System.out.println(date); // 默认输出CST时间(东八区)
// Date date=new Date(1572960924868L);
SimpleDateFormat sdf8=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));//设置时区为东八区
System.out.println("东八区的时间:"+sdf8.format(date));//输出格式化日期
SimpleDateFormat sdf9=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf9.setTimeZone(TimeZone.getTimeZone("GMT+9:00"));//设置时区为东九区
System.out.println("东九区的时间:"+sdf9.format(date));//输出格式化日期
2,Calendar日期操作
Calendar calendar = Calendar.getInstance(); // 获取当前时间calendar
// 获取下个月第一天
calendar.add(Calendar.MONTH, 1); // calendar的月份+0
calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置calendar的DAY_OF_MONTH为1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String nextMonthFirst = sdf.format(calendar.getTime()); // 因为calendar的toString()显示不直观,一般转为Date格式化输出显示
System.out.println(nextMonthFirst);
// 获取当月最后一天(也就是下个月第0天)
Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.MONTH, 1);
calendar1.set(Calendar.DAY_OF_MONTH, 0);
String lastday = sdf.format(calendar1.getTime());
System.out.println(lastday);
// 通过年月日设置calendar
int year = 2000; int month = 5; int day = 18;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year); //设置年份
cal.set(Calendar.MONTH, month-1); //设置月份, 注意-1,因为calendar的月份从0开始
cal.set(Calendar.DAY_OF_MONTH, day);
System.out.println(sdf.format(cal.getTime()));
Calendar calendar2 = Calendar.getInstance();
//获取某月最小天数
int firstDay = calendar2.getMinimum(Calendar.DATE);
//获取某月最大天数
int lastDay = calendar2.getActualMaximum(Calendar.DATE);
System.out.println(firstDay);
System.out.println(lastDay);
3,Date和Calendar的转化
// calendar转为Date
Calendar calendar = Calendar.getInstance(); // 获取当前时间
Date time = calendar.getTime();
System.out.println(time);
// Date转calendar
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse("2023-4-12");
} catch (ParseException e) {
e.printStackTrace();
}
calendar.setTime(date);
System.out.println(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1));
4,获取当前年份、月份、日期——2种方式
1)创建一个Calendar类的实例对象,Calendar类属于java.util包
//1, 创建一个Calendar类的实例对象,Calendar类属于java.util包
Calendar calendar = Calendar.getInstance();
// 获取当前年
int year = calendar.get(Calendar.YEAR);
System.out.println(year);
// 获取当前月, 注意+1,因为calendar的月份从0开始
int month = calendar.get(Calendar.MONTH) + 1;
System.out.println(month);
// 获取当前日
int day = calendar.get(Calendar.DATE);
System.out.println(day);
// 获取当前小时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println(hour);
// 获取当前分钟
int minute = calendar.get(Calendar.MINUTE);
System.out.println(minute);
// 获取当前秒
int second = calendar.get(Calendar.SECOND);
System.out.println(second);
// 获取当前是本周第几天, 英语中周日才是第1天,依次后推
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(dayOfWeek);
// 获取当前是本月第几天
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(dayOfMonth);
// 获取当前是本年第几天
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println(dayOfYear);
2)通过Date类,获取当前日期时间,然后通过split分割各个字段
// 2,通过Date类,获取当前日期时间,然后通过split分割各个字段
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String today = format.format(date);
String[] dayTimeArr = today.split(" ");
System.out.println(today);
2,多种格式化日期操作