Calendar set()方法未设置正确的时间

时间:2016-02-02 12:59:13

标签: java

我在我的日历实例上设置时间如下

private Calendar mCalendar = Calendar.getInstance();

public void onTimeSet(int hourOfDay, int minute, int second) {
    int year = mCalendar.get(Calendar.YEAR);
    int monthOfYear = mCalendar.get(Calendar.MONTH);
    int dayOfMonth = mCalendar.get(Calendar.DAY_OF_MONTH);

    Calendar lCalendar = Calendar.getInstance();
    lCalendar.set(year, monthOfYear, dayOfMonth, hourOfDay, minute);

    Date lDate = lCalendar.getTime();
    if (lDate.before(new Date())) {
        return;
    } else {
        mCalendar.set(year, monthOfYear, dayOfMonth, hourOfDay, minute);
        setItemTime();
    }
}

但是,在Calendar lCalendar mCalendar 的两个实例上调用 getTime()时,我得到的时间日历实例化时,日历实例上设置的hourOfDayminute参数不是实例化的。此外,如果我在任一实例上再次调用getTime()方法,我会得到正确的时间。

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:2)

浏览部分字段操作 at Calendar Documentation

基本上,您设置的字段不是time并且尝试获取time而不是单个设置字段。根据文档,调用time函数后,日历set(...)不会立即更新。

在那里,阅读之间的行,

  

具体情况由具体日历类确定。

所以我想,无法提供通用答案。

答案 1 :(得分:0)

我无法重现你的问题。我在public partial class Prologue : Script{ public bool Panic = true; // ... } 之前遇到public class Class1 { Prologue myPrologue = new Prologue(); //... void AnotherMethod() { myPrologue.PrologueMission(); } //... void Update10() { if (myPrologue.Panic) { //code... } } } 。它告诉我System.out.println()有我设定的新小时和分钟。如果它们在实际时间之前(在我的计算机时钟上),则不会触及if,当然,这意味着它保留了实例化的时间。您在计算机的时钟上的哪个时间尝试过,以及您对lDate提出的论点是什么?

顺便说一句,您是否故意不使用mCalendar参数?如果需要,您可以将其与其他人一起传递给onTimeSet()。您可能还想先调用second来摆脱它实例化的时间。