如何让我的日历忽略 DST 调整?

问题描述 投票:0回答:1

我试图通过在给定的日期时间上添加分钟来计算时间。它适用于其他时间,但不适用于 DST 时间 [加拿大东部时间]。

 public static GregorianCalendar addMinuts(GregorianCalendar newDate, int minutes) {
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(newDate.getTime());

        Log.i("UtilApp", "expiry date before add minutes " + cal.getTime());
        cal.add(Calendar.MINUTE, minutes);
        Log.i("UtilApp", "expiry date after add " + minutes + " minutes " + cal.getTime());
        return setGreCalendar(cal.getTime());
    }

 public static GregorianCalendar setGreCalendar(Date date) {
        Date date1;
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        if (date != null) {
            date1 = date;
            gregorianCalendar.setTime(date1);
        }
        return gregorianCalendar;
    }

例如:- 我在 3 月 9 日添加了 225 分钟,即 3 小时 45 分钟,它给出了确切的日期和时间,因为 DST 尚未生效。

3月9日

3 月 10 日,DST 生效,所以我得到的不是 03:45,而是 04:45,同样的 225 分钟。由于 DST,日历会跳过 2:00 到 3:00 之间的时间。

3月10日

我希望它忽略 DST 调整。我尝试使用时区、本地日期时间,但它没有按预期工作。任何帮助将不胜感激。

java android calendar dst gregorian-calendar
1个回答
0
投票

您(在问题中)写道:

我尝试使用时区、本地日期时间,但没有按预期工作。

我不知道您是否指的是类 LocalDateTime,因为如果您是指类,那么它应该按您的预期工作,因为类

LocalDateTime
没有时区,而类
Calendar
则具有其子类
GregorianCalendar
,继承。

无论夏令时调整如何,下面的代码都会在向

LocalDateTime
添加分钟时给出您的预期结果。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class AdMinute {

    public static void main(String[] args) {
        LocalDate ld = LocalDate.of(2024, 3, 10);
        LocalDateTime ldt = ld.atStartOfDay();
        System.out.println("Org: " + ldt);
        System.out.println("Add: " + ldt.plus(225, ChronoUnit.MINUTES));
    }
}

这是运行上述代码时的输出:

Org: 2024-03-29T00:00
Add: 2024-03-29T03:45

请注意,我在以色列,我们的夏令时从 3 月 29 日开始。凌晨 2:00 时钟提前到凌晨 3:00。如果我将上面代码中的日期替换为 29(而不是 10),我仍然会得到相同的结果。因此,使用

LocalDateTime
不会 受到夏令时调整的影响。

请参阅此教程

© www.soinside.com 2019 - 2024. All rights reserved.