六.相互转换
1.Calendar对象和Date对象互相转换
Calendar 类中提供了将 Calendar 对象所表示的某一特定瞬间转换成 Date 对象的方法
public final Date getTime();
Calendar 类中提供了将 Date 对象转换成 Calendar 对象所表示的某一特定瞬间的方法
public final void setTime(Date date);
示例:
public static void main(String[] args) {
//Calendar --> Date
Calendar calendar = new GregorianCalendar();
// java.util.Date 类中的 getTime() 方法可以返回一个毫秒值
// java.util.Calendar 类中的 getTime() 用于返回相应的 Date 实例
Date d = calendar.getTime();
System.out.println(d);
//Date-->Calendar
Date date = new Date();
Calendar c = Calendar.getInstance();
c.clear(); //清空所有字段值
c.setTime(date); //设置时间
System.out.println(c);
}
2.将字符串解析为Date对象
将指定字符串按照特定的格式解析为 Date 对象:
package com.itlaobing.note;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SimpleDateFormatTest2 {
public static void main(String[] args) {
//重点:将 指定格式字符串 解析为 java.util.Date 对象
final String pattern = "yyyy-MM-dd";//字符串格式
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Scanner sc = new Scanner(System.in);// 创建扫描器读取用户输入的数据
System.out.println("请输入一个日期( 格式为 " + pattern + " ,比如 2019-10-24
)");
String s = sc.nextLine(); // 读取用户输入的整行数据
System.out.println("你输入的是: " + s); //你输入的是: 2019-10-10
try {
// 将 字符串 解析为 Date 类型的实例
Date date = sdf.parse(s); //如果格式不正确,可能抛出 ParseException 异常
System.out.println(date);//Thu Oct 10 00:00:00 CST 2019
long time = date.getTime();//1570636800000
System.out.println(time);
} catch (ParseException e) {
System.out.println("你输入的日期格式不符合 " + pattern);
e.printStackTrace();
}
sc.close(); // 关闭扫描器
}
}
2.LocalDate转LocalDateTime
LocalDate
-
atStartOfDay() 将时间初始化为 00:00
-
atTime(int hours, int minutes[, int seconds[, int nanoOfSecond]]) 将时间初始
化为指定的值
-
atTime(LocalTime time) 以指定的时间
LocalDateTime
- of(LocalDate date, LocalTime time)
package com.itlaobing.note;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class LocalDateTest4 {
public static void main(String[] args) {
LocalDate n = LocalDate.now();
System.out.println(n);
// LocalDate ---> LocalDateTime
LocalDateTime datetime = n.atStartOfDay();//一天的开始
System.out.println(datetime);
LocalDateTime first = n.atTime(10, 20);//在某个时间点
System.out.println(first);
LocalDateTime second = n.atTime(10, 20, 30);
System.out.println(second);
LocalDateTime third = n.atTime(10, 20, 30, 100200300);
System.out.println(third);
}
}
3.LocalTime转LocalDateTime
package com.itlaobing.note;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class LocalTimeTest4 {
public static void main(String[] args) {
LocalTime time = LocalTime.now();
System.out.println(time); //22:03:07.970
// LocalTime ---> LocalDateTime
LocalDate date = LocalDate.of(2019, 10, 24);
LocalDateTime dateTime = time.atDate(date);// 在某一天
System.out.println(dateTime);
}
}
4.LocalDateTime 转 LocalDate 或 LocalTime
package com.itlaobing.note;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class LocalDateTimeTest4 {
public static void main(String[] args) {
LocalDateTime datetime = LocalDateTime.now();
System.out.println(datetime);
// LocalDateTime ---> LocalDate
LocalDate date = datetime.toLocalDate();
System.out.println(date);
// LocalDateTime ---> LocalTime
LocalTime time = datetime.toLocalTime();
System.out.println(time);
}
}
5.Date转LocalDateTime
package com.itlaobing.note;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class DateTest2 {
public static void main(String[] args) {
/**
* 将Date对象转换成LocalDate/LocalTime/LocalDateTime
* 1. 将java.util.Date对象所表示的瞬间转换成java.time.Instant
* 2. 通过java.time.Instant获取具有时区的日期时间java.time.ZonedDateTime
* 3. 将java.time.ZonedDateTime转换成相应类型
*/
final long ms = 1000L * 60 * 60 * 24 * 365 * 26;
Date date = new Date(ms);
System.out.println(date);//Tue Dec 26 08:00:00 CST 1995
System.out.println("===============");
//Instant指在时间线上的瞬间点
Instant instant = date.toInstant(); // Date ==> java.time.Instant
//ZoneId指一个时区ID
ZoneId zone = ZoneId.of("Asia/Shanghai");//时区设置成亚洲/上海时间
//ZonedDateTime指具有时区的日期时间
ZonedDateTime zonedDateTime = instant.atZone(zone);
LocalDateTime datetime = zonedDateTime.toLocalDateTime();
System.out.println(datetime);//1995-12-26T08:00
LocalDate d = zonedDateTime.toLocalDate();
System.out.println(d);//1995-12-26
LocalTime t = zonedDateTime.toLocalTime();
System.out.println(t);//08:00
}
}
6.LocalDateTime转Date
package com.itlaobing.note;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class LocalDateTimeTest5 {
public static void main(String[] args) {
/**
* 将LocalDateTime对象转换成Date对象
* 1. 获取带时区的java.time.ZonedDateTime对象
* 2. 将java.time.ZonedDateTime对象转换成表示某一瞬间的java.time.Instant对象
* 3. 通过Date.from方法,将java.time.Instant对象转换成Date对象
*/
LocalDateTime datetime = LocalDateTime.of(1999, 11, 22, 6, 30, 7);
ZoneId zone = ZoneId.systemDefault();//获取系统默认时区
ZonedDateTime zonedDateTime = ZonedDateTime.of(datetime, zone);
Instant instant = Instant.from(zonedDateTime);
Date date = Date.from(instant);
System.out.println(date);//Mon Nov 22 06:30:07 CST 1999
}
}`