Discuss / Java / 作业

作业

Topic source

云外方天

#1 Created at ... [Delete] [Delete and Lock User]
package com.test.date;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * @author ygr
 * @description ZonedDateTime练习
 * @date 2021/10/28
 */
public class ZonedDateTimeTest {
    public static void main(String[] args) {
        //设置北京时间:2019-09-15 13:00:00
        LocalDateTime departureAtBeijing = LocalDateTime.of(2019, 9, 15, 13, 0, 0);
        //飞行所需时间:13小时20分钟
        int hours = 13;
        int minutes = 20;
        LocalDateTime arrivalAtNewYork = calculateArrivalAtNY(departureAtBeijing, hours, minutes);
        System.out.println(departureAtBeijing + " -> " + arrivalAtNewYork);
        // test:
        if (!LocalDateTime.of(2019, 10, 15, 14, 20, 0)
                .equals(calculateArrivalAtNY(LocalDateTime.of(2019, 10, 15, 13, 0, 0), 13, 20))) {
            System.err.println("测试失败!");
        } else if (!LocalDateTime.of(2019, 11, 15, 13, 20, 0)
                .equals(calculateArrivalAtNY(LocalDateTime.of(2019, 11, 15, 13, 0, 0), 13, 20))) {
            System.err.println("测试失败!");
        }
    }

    /**
     * 北京时间转为纽约时间
     *
     * @return java.time.LocalDateTime
     * @params departureAtBeijing
     * @params hours
     * @params minutes
     */
    private static LocalDateTime calculateArrivalAtNY(LocalDateTime departureAtBeijing, int hours, int minutes) {
        //到达纽约时的北京时间(中国时区)
        ZonedDateTime bjZonedDateTime =
                departureAtBeijing.plusHours(hours).plusMinutes(minutes).atZone(ZoneId.systemDefault());
        //中国时区北京时间转为美国东部时区纽约时间
        ZonedDateTime nyZonedDateTime = bjZonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));

        return nyZonedDateTime.toLocalDateTime();
    }
}


  • 1

Reply