java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
- 此方法适合用于计算时间差
计算世界时间主要有三个标准:UTC/GMT/CST
java.util.Date类
表示特定的瞬间,精确到毫秒
这个类有两个构造器:Date()/Date(long date)
常用方法:
-
getTime()
返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
-
toString()
把此 Date 对象转换为以下形式的 String:dow mon dd hh:mm:ss zzz yyyy。其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
import java.util.Date;
public class DateTimeTest {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d.getTime());
System.out.println(d.toString());
}
}
---------
1591861083689
Thu Jun 11 15:37:09 CST 2020
java.text.SimpleDateFormat类
SimpleDateFormat类是一个允许自定义格式化的类。
这个类也有两个构造器:SimpleDateFormat()/SimpleDateFormat(String pattern)
常用方法:
-
Format(Date date)
方法格式化时间对象date
-
parse(String source)
从给定字符串的开始解析文本,生成一个日期
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTimeTest {
public static void main(String[] args) {
// 产生一个Date实例
Date date = new Date();
// 产生一个formater格式化的实例
SimpleDateFormat formater = new SimpleDateFormat();
// 打印输出默认的格式
System.out.println(formater.format(date));
SimpleDateFormat formater2 = new SimpleDateFormat("yyyy年MM月dd日 EEEHH:mm:ss");
System.out.println(formater2.format(date));
try {
// 实例化一个指定的格式对象
Date date2 = formater2.parse("2008年08月08日 星期一 08:08:08");
// 将指定的日期解析后格式化按指定的格式输出
System.out.println(date2.toString());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
java.util.Calendar类
Calendar是一个抽象基类,用于完成日期字段之间相互操作的功能。
构造器:Calendar.getInstance()/GregorianCalendar()
常用方法:
-
get(int field)
获取想要得到的时间信息。
field可以是YEAR(年)、MONTH(月)、DAY_OF_WEEK(日)、HOUR_OF_DAY(时)、MINUTE(分)、SECOND(秒)
-
set(int field,int value)
修改时间信息
-
add(int field,int amount)
增加时间信息的值
-
getTime()
获取时间
-
setTime()
修改时间
import java.util.Calendar;
import java.util.Date;
public class DateTimeTest {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 使用给定的 Date 设置此 Calendar 的时间
date = new Date(234234235235L);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 8);
System.out.println("当前时间日设置为8后,时间是:" + calendar.getTime());
calendar.add(Calendar.HOUR, 2);
System.out.println("当前时间加2小时后,时间是:" + calendar.getTime());
calendar.add(Calendar.MONTH, -2);
System.out.println("当前日期减2个月后,时间是:" + calendar.getTime());
}
}
以上四个类是老API,现在用的不是很多,下面是java8以后新出的API。
java.time
java.time 中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了日期时间和本地化的管理
java.time除了本身的基础包,还有四个包:
- java.time.chrono 提供对不同的日历系统的访问
- java.time.format 格式化和解析时间和日期
- java.time.temporal 包括底层框架和扩展特性
- java.time.zone 包括时区支持的类
日常开发中只需要用到基础包与format包,偶尔需要使用temporal包。
time包中有三个常用的类:
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期
- LocalTime表示一个时间,而不是日期
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类。
瞬时
time包中有一个概念叫做瞬时(instant),被用来记录应用程序中的时间戳。
他可以直接从时间线上取出一个点,精度达到纳秒级别,不需要提供上下文信息。
Java小白修炼手册
java.time.format.DateTimeFormatter类
这个类提供三种格式化方式
-
预定义的格式
ISO_LOCAL_DATE_TIME
ISO_LOCAL_DATE
ISO_LOCAL_TIME
-
本地化相关的格式
ofLocalizedDateTime(FormatStyle.LONG)
-
自定义格式
ofPattern(“yyyy-MM-dd hh:mm:ss”)
常用方法:
-
ofPattern(String pattern)
返回一个指定字符串格式的时间
-
format(TemporalAccessor t)
格式化一个日期、时间,返回字符串
-
parse(CharSequence text)
将格式化字符序列解析为一个日期