往期回顾:
在前端中,使用原生js操作日期使用new Date() 这个构造函数。比如,我们获取时间戳
let time = new Date().getTime()
console.log(time) // 1697531070333
我们简单复习一下js中一些常用的时间操作
getDate(): 返回日期对象中的日(从 1 到 31)。
getDay(): 返回日期对象中的星期几(从 0 到 6,0 表示星期日)。
getFullYear(): 返回日期对象中的四位年份。
getHours(): 返回日期对象中的小时(从 0 到 23)。
getMinutes(): 返回日期对象中的分钟(从 0 到 59)。
getSeconds(): 返回日期对象中的秒数(从 0 到 59)。
getTime(): 返回日期对象的毫秒表示,自1970年1月1日00:00:00 UTC起。
getMonth(): 返回日期对象中的月份(从 0 到 11,0 表示一月)。
setDate(day): 设置日期对象中的日。
setFullYear(year, month, day): 设置日期对象中的年份、月份和日。
setHours(hour, min, sec, millisec): 设置日期对象中的小时、分钟、秒和毫秒。
setMinutes(min, sec, millisec): 设置日期对象中的分钟、秒和毫秒。
setSeconds(sec, millisec): 设置日期对象中的秒和毫秒。
setTime(millisec): 以毫秒为单位设置日期对象。
setMonth(month, day): 设置日期对象中的月份和日。
java中的日期操作是怎么样的呢?
在java中,也有一些列操作时间的方法,比如,在Java中,打印时间戳我们可以用System. currentTimeMillis方法。
public class Date {
public static void main(String[] args) {
// Date :日期类
System.out.println(System.currentTimeMillis()); // 1697530889457
}
}
System.currentTimeMillis返回以毫秒为单位的当前时间,即从1970年1月1日午夜开始到现在的时间差,结果以毫秒为单位表示。
java中的日期操作主要通过日期类(Date) 和日历类(Calendar)及 LocalDate类,每个类都有其优点和缺点。
日期类是通过new Date()声明的类,我们在编译器输入new Date()时,会发现有java.util.Date和java.sql.Date。
java.util.Date和java.sql.Date都是Java中用于表示日期的类,与数据库交互,可以使用java.sql.Date,业务代码开发中,我们自然使用java.util.Date
import java.util.Date;
public class DateStudy {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d); // Tue Oct 17 16:52:41 CST 2023
}
}
new Date() 的返回值是一个 java.util.Date 对象,其包含创建时的年、月、日、小时、分钟、秒和毫秒等信息。
前端中日期格式化,我们经常会使用第三方插件如dayjs或者momentjs。
let time = new Date().format("YYYY-MM-DD HH:mm:ss")
consloe.log(time) // 2023-10-17 23:59:59
在java中,我们借助SimpleDateFormat类就可以快速实现日期的格式化,而不用引入额外东西。
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateStudy {
public static void main(String[] args) {
// 创建一个 Date 对象
Date d = new Date();
// 创建一个 SimpleDateFormat 对象,指定日期格式
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd");
// 使用 SimpleDateFormat 对象格式化日期
String time = formatter.format(d);
System.out.println(time); // 2023-10-17
}
}
日期字符含义
注意,java中的DD和前端中的DD含义不同。在java中,DD表示一年中的日期而不是一个月中的日期。
// 创建一个 SimpleDateFormat 对象,指定日期格式
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-DD");
// 使用 SimpleDateFormat 对象格式化日期
String time = formatter.format(d);
System.out.println(time); // 2023-10-290
上述打印机结果中的290就是指的本年的第290天。
Java中日期类的常用方法有很多,我们目前不用过多学习,大致了解即可。
getTime()
返回自1970年1月1日00:00:00 GMT以来的毫秒数。
Date d = new Date();
System.out.println(d.getTime()); // 1697535905242
before、after
比较两个日期的先后顺序。
注:new Date这种传参方式已经不被推荐,建议使用日历类操作了。
其他的不在列出。
java.util.Calendar类的常用方法包括:getTime()、setTime()、add()、get()、set()等。
我们来简单熟悉一下这些方法。
getTime()方法被用来检索此日历的日期和时间,通常以java.util.Date对象的形式返回。
import java.util.Calendar;
import java.util.Date;
public class DateStudy {
public static void main(String[] args) {
// 创建一个Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); // Tue Oct 17 18:10:12 CST 2023
}
}
注意:创建日历对象的方式和创建日期对象的方式是有区别的!!
setTime()方法被用来设置此日历的日期和时间,Calendar.setTime 方法可以接受一个 Date 或 long 类型的时间参数,通常以java.util.Date对象的形式提供。
以 java.util.Date 对象的形式提供
public class DateStudy {
public static void main(String[] args) {
// 创建一个Calendar对象
Calendar calendar = Calendar.getInstance();
// 创建一个自定义时间的Date对象
Date customTime = new Date(2023,12,1);
// 用自定义时间的Date对象设置Calendar的时间
calendar.setTime(customTime);
System.out.println(calendar.getTime()); //Tue Jan 01 00:00:00 CST 3924
}
}
long 类型入参
public class DateStudy {
public static void main(String[] args) {
// 创建一个Calendar对象
Calendar calendar = Calendar.getInstance();
// 定义一个long类型的时间参数,从2000毫秒后开始
long time = System.currentTimeMillis() + 2000;
// 用long类型的时间参数设置Calendar的时间
calendar.setTimeInMillis(time);
System.out.println(calendar.getTime()); // Tue Oct 17 18:24:09 CST 2023
}
}
注:不同入参,设置时间时用不同方法
注意:
add方法的第一个参数是要修改的时间字段,Calendar提供一些默认的枚举值;例如,Calendar.DAY_OF_YEAR意味着你要修改年中的日期,Calendar.MONTH意味着你要修改月份,以此类推。
第二个参数是你要添加(或减少)的值。
日历类的set方法用于设置日历的各个字段,例如年、月、日、小时和分钟。
public class DateStudy {
public static void main(String[] args) {
// 创建一个Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置日历的年份
int year = 2023;
calendar.set(Calendar.YEAR, year);
// 设置日历的月份
int month = 10;
calendar.set(Calendar.MONTH, month - 1); // 注意,月份是从0开始的,所以要减1
// 设置日历的日期
int day = 23;
calendar.set(Calendar.DAY_OF_MONTH, day);
// 设置日历的小时和分钟
int hours = 23;
int minutes = 59;
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, minutes);
// 输出设置后的日历时间
System.out.println("设置后的日历时间为: " + calendar.getTime());
// 设置后的日历时间为: Mon Oct 23 23:59:28 CST 2023
}
}
LocalDate类是Java 8引入的一个日期类,它表示一个特定的日期,包括年、月和日,但不包括时间。这个类提供了一系列的方法来操作和处理日期,如获取当前日期、增加或减少日期、比较日期等等。
实际上,java8还引入了其他和时间有关的类
这三个类都位于java.time包中,它们的设计旨在替换Java 8之前的Date和Calendar类,并提供更完善、更一致和更易于使用的日期和时间API。(ps:妈的,全是学习成本)