1.String
String具有不可变性,因为String类中定义的是final,即使改变传递的形参,String原内容也不会改变,(额外说一句,形参传递时,基本类型传递的是内容,引用数据类型传递的是地址值)
Strin常用方法
2.StringBuffer
StringBuffer是可变的,传递参数时,值会被改变
构造器:三种方法
3.StringBuilder
4.JDK8之前的时间API
1.java.lang.System类
System
类提供的
public static long currentTimeMillis()
用来返回当前时间与1970
年
1
月
1
日
0
时
0
分
0
秒之间以毫秒为单位的时间差。
此方法适于计算时间差
@Test
public void Test1(){
double num=0;
long startTime;
long endTime;
startTime=System.currentTimeMillis();
System.out.println(startTime);
for (int i = 0; i < 10000000; i++) {
num+=i;
}
endTime =System.currentTimeMillis();
System.out.println(endTime);
System.out.println(endTime-startTime);
System.out.println("-----");
System.out.println(num);
}
2. java.util.Date类
表示特定的瞬间,精确到毫秒
构造器:
Date()
:
使用无参构造器创建的对象可以获取本地当前时间。
Date(long date)
常用方法
getTime():
返回自
1970
年
1
月
1
日
00:00:00 GMT
以来此
Date
对象表示的毫秒数。
toString():
把此
Date
对象转换为以下形式的
String
:
dow mon dd hh:mm:ss zzz yyyy 其中:
dow
是一周中的某一天
(Sun, Mon, Tue, Wed, Thu, Fri, Sat),
zzz
是时间标准。
其它很多方法都过时了
@Test
public void Test2(){
Date date =new Date();
System.out.println(date.getTime());
System.out.println(date.toString());
Date date1 =new Date(785785674568786678l);
System.out.println(date1.toString());
}
3.java.text.SimpleDateFormat类
Date
类的
API
不易于国际化,大部分被废弃了,
java.text.SimpleDateFormat
类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行
格式化:日期->
文本
、
解析:文本
->
日期
格式化:
SimpleDateFormat()
:默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern)
:
该构造方法可以用
参数
pattern
指定的格式创建一个对象,该对象调用format:
设置日期格式
public String format(Date date)
:
将date按照给定的日期格式输出
解析:
public Date parse(String source)
:
从给定字符串的开始解析文本,以生成一个日期。
@Test
public void Test3() {
// 格式化:日期-》文本
Date date = new Date();
SimpleDateFormat formater = new SimpleDateFormat();
System.out.println(formater.format(date));// 2022/2/8 下午8:16
SimpleDateFormat formater1 = new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss z");
// 2022年02月08日 周二 20:25:00 CST
System.out.println(formater1.format(date));
//---------------------------------------------------------
// 解析:文本->日期
try {
Date data1 = formater1.parse("2022年2月8日 星期二 08:08:08 CST");
//解析的文本内容格式须与formater1格式一致
System.out.println(data1.toString());// Tue Feb 08 08:08:08 CST 2022
} catch (ParseException e) {
e.printStackTrace();
}
}
4.java.util.Calendar类
Calendar
是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例
的方法
使用
Calendar.getInstance()
方法
调用它的子类
GregorianCalendar
的构造器。
一个
Calendar
的实例是系统时间的抽象表示,通过
get(int field)
方法来取得想要的时间信息。比如YEAR
、
MONTH
、
DAY_OF_WEEK
、
HOUR_OF_DAY
、
MINUTE
、
SECOND
public void set(int field,int value) 设置特定日期时间
public void add(int field,int amount) 加减特定日期时间
public final Date getTime() 得到日期时间
public final void setTime(Date date) 设置日期时间
注意
:
获取月份时:一月是
0
,二月是
1
,以此类推,
12
月是
11
获取星期时:周日是
1
,周二是
2
, 。。。。周六是
7
@Test
public void Test4(){
//创建calendar实例
Calendar calendar = Calendar.getInstance();
//获取calendar对象的时间
Date date =calendar.getTime();
System.out.println(date);
//设置calendar对象的时间
date =new Date(84938432432l);
calendar.setTime(date);
System.out.println(calendar.getTime());
// 比如YEAR、MONTH、DAY_OF_WEEK(一周的第几天)、HOUR_OF_DAY(一天的第几个小时) 、MINUTE、SECOND
// 设置calendar重要时间信息
calendar.set(Calendar.YEAR,2021);
calendar.set(Calendar.DAY_OF_WEEK,7);
calendar.set(Calendar.SECOND,60);
calendar.set(Calendar.HOUR,2);
// 获取calendar重要时间信息,必须先设置,才能获取
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.HOUR));
//对calendar对象的日期时间进行加减
calendar.add(Calendar.HOUR,2);//加两个小时
System.out.println(calendar.get(Calendar.HOUR));
calendar.add(calendar.HOUR,-2);//减两个小时
System.out.println(calendar.get(Calendar.HOUR));
System.out.println(calendar.getTime());
}
5.JDK8中新的时间API
java.time
– 包含值对象的基础包
java.time.
LocalDate
java.time.
LocalTime
java.time.
LocalDateTime
java.time.
ZonedDateTime
java.time.chrono
–
提供对不同的日历系统的访问
java.time.format
–
格式化和解析时间和日期
java.time.temporal
–
包括底层框架和扩展特性
java.time.zone
–
包含时区支持的类
1.java.time – 包含值对象的基础包 java.time.LocalDate java.time.LocalTime java.time.LocalDateTime java.time.ZonedDateTime
@Test
public void Test5(){
//now()获取当前日期时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
System.out.println("1111----------------------");
//of()指定日期时间
localDateTime = LocalDateTime.of(2021,1,1,1,1,1);
localDate =LocalDate.of(2021,2,2);
localTime = LocalTime.of(2,2,2);
System.out.println(localDateTime);
}
2.java.time.Instant类
@Test
public void Test6(){
//获取本初子午线的时间
Instant instant =Instant.now();
System.out.println(instant);
//instant的时间偏移8个时区,东部时区是正的,中国北京在东8时区
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
//返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳
long time = instant.toEpochMilli();
System.out.println(time);//1644329247619
//创建Instant对象 long型数据指 在1970-01-01 00:00:00基础上加上指定毫秒数
Instant instant1 =Instant.ofEpochMilli(1644329247619l);
System.out.println(instant1);//2022-02-08T14:07:27.619Z
}
3.java.time.format.DateTimeFormatter 类
三种格式化方法:
预定义的标准格式。如:
ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
本地化相关的格式。如:
ofLocalizedDateTime(FormatStyle.LONG)
自定义的格式。如:
ofPattern(“yyyy-MM-dd hh:mm:ss”)
@Test
public void Test7(){
//方式一: 预定义的标准格式。如:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期-》字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str = formatter.format(localDateTime);
System.out.println(localDateTime);//2022-02-08T22:25:53.952664900
System.out.println(str);//2022-02-08T22:25:53.9526649
//解析:字符串-》日期
TemporalAccessor parse = formatter.parse("2022-02-08T22:25:53.9526649");
System.out.println(parse);
System.out.println("-------------------------------------");
//方式二: 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG) 一共四种格式,full,long,medium,short
// 'Tuesday, April 12, 1952 AD' or '3:30:42pm PST'.FULL || 'January 12, 1952'.LONG,
// 'Jan 12, 1952'.MEDIUM, ||'12.13.52' or '3:30pm'.SHORT;
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//格式化:日期-》字符串
LocalDateTime localDateTime1 =LocalDateTime.now();
String str1 = formatter1.format(localDateTime1);
System.out.println(localDateTime1);
System.out.println(str1);
//
System.out.println("-------------------------------------");
//重点: 方式三:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String str4 = formatter3.format(LocalDateTime.now());
System.out.println(str4);//2020-05-10 06:26:40
//解析
TemporalAccessor accessor = formatter3.parse("2020-05-10 06:26:40");
System.out.println(accessor);
}
4.其他时间API 类
ZoneId
:
该类中包含了所有的时区信息,一个时区的
ID
,如
Europe/Paris
ZonedDateTime
:
一个在
ISO-8601
日历系统时区的日期时间,如
2007-12-03T10:15:30+01:00 Europe/Paris。
其中每个时区都对应着
ID
,地区
ID
都为“
{
区域
}/{
城市
}
”的格式,例如:Asia/Shanghai等
@Test
public void Test8(){
// ZoneId的getAvailableZoneIds():获取所有的ZoneId
Set <String> zoneIds = ZoneId.getAvailableZoneIds();
for (String s : zoneIds){
// System.out.println(s);
}
// ZoneId的of():获取指定时区的时间
LocalDateTime localDateTime3 = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(localDateTime3);
// ZonedDateTime的now():获取本时区的ZonedDateTime对象
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);
// ZonedDateTime的now(ZoneId id):获取指定时区的ZonedDateTime对象
ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(zonedDateTime1);
}
Clock
:
使用时区提供对当前即时、日期和时间的访问的时钟。
持续时间:
Duration
,用于计算两个“时间”间隔
日期间隔:
Period
,用于计算两个“日期”间隔
TemporalAdjuster :
时间校正器。有时我们可能需要获取例如:将日期调整到“下一个工作日”等操作。
TemporalAdjusters :
该类通过静态方法(firstDayOfXxx()/lastDayOfXxx()/nextXxx())提供了大量的常用TemporalAdjuster 的实现。
6、时间类总结
1.java.lang.System类
2. java.util.Date类
3.java.text.SimpleDateFormat类
4.java.util.Calendar类
5.java.time – 包含值对象的基础包 java.time.LocalDate java.time.LocalTime java.time.LocalDateTime java.time.ZonedDateTime
6.java.time.Instant类
7.java.time.format.DateTimeFormatter 类
8.其他时间API 类:
ZoneId
:
ZonedDateTime
:
Clock
:
Duration
Period
TemporalAdjuster :
TemporalAdjusters :