时间类(六)【相互转换】

六.相互转换

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
    }
}`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值