Календарь Java всегда показывает одно и то же время

1

Ниже мой код.

public class TestCalendar {

public static void main(String[] args){
    int unique_id = Integer.parseInt("" + Calendar.HOUR + Calendar.MINUTE
            + Calendar.SECOND);

    System.out.println(unique_id);
}
}

Calendar.HOUR должен дать мне

public static final int HOUR Номер поля для получения и установки, указывающий час утреннего или дневного времени. ЧАС используется для 12-часового такта (0 - 11). Полдень и полночь представлены 0, а не на 12. Например, в 10: 04: 15.250 PM ЧАС составляет 10.

Неважно, сколько раз я запускаю этот код, он всегда дает мне тот же уникальный_ид. (101213), и мое местное время на моей машине - 13:30. Что я здесь делаю неправильно?

Благодарю.

  • 0
    Чего вы на самом деле пытаетесь достичь? Если вы просто пытаетесь получить уникальное значение, переход к второму вряд ли достигнет его в любом случае - но вы можете сделать это без какой-либо обработки строки или доступа к календарю.
  • 0
    Чтобы получить уникальный идентификатор на основе времени, лучше использовать Calendar.getTimeInMillis ()
Показать ещё 2 комментария
Теги:
calendar

5 ответов

3
Лучший ответ

Ваш код - это просто конкатенация констант, которые календарь определяет, чтобы идентифицировать некоторые из его полей. Чтобы получить значения этих полей, вызовите Calendar.get() и передайте константный идентификатор в качестве аргумента:

public class TestCalendar {

public static void main(String[] args){
    Calendar c = Calendar.getInstance();
    int unique_id = Integer.parseInt("" + c.get(Calendar.HOUR) + c.get(Calendar.MINUTE)
            + c.get(Calendar.SECOND));

    System.out.println(unique_id);
}
}

Вышеупомянутое будет работать, но результат будет далеко не уникальным. Чтобы получить идентификатор, однозначно идентифицирующий момент времени (с точностью миллисекунд), рассмотрите Calendar.getTimeInMillis().

  • 0
    Calendar здесь - это класс, а не имя переменной ссылки на экземпляр, поэтому вызов нестатического метода get(int field) не будет компилироваться.
  • 0
    @WilliamPrice Так я должен сделать getInstance Календаря, а затем сделать getmethod?
Показать ещё 3 комментария
3

Calendar.HOUR, Calendar.MINUTE и Calendar.SECOND - это public static int field класса Calendar. Их значение

  • CALENDAR.HOUR: 10
  • КАЛЕНДАРЬ. МИНУТ: 12 и
  • КАЛЕНДАРЬ. СЕКОНД: 13.

Ваша String конкатенация просто добавив эти значения. Чтобы читать из Calendar вы могли бы что-то подобное

calendar.get(Calendar.HOUR);
calendar.get(Calendar.MINUTE);
0

Для тех, у кого все еще есть проблемы с этим, как и я, особенно когда вы хотите печатать несколько раз, вам может понадобиться использовать новые, например, следующие:

System.out.println(""+new GregorianCalendar().get(Calendar.HOUR_OF_DAY)+":"+new GregorianCalendar().get(Calendar.MINUTE)+":"+new GregorianCalendar().get(Calendar.SECOND)+":"+new GregorianCalendar().get(Calendar.MILLISECOND));
  • 0
    Это может дать вам, например, 13:6:5:96 . Это то, что вы хотели? Также с несколькими вызовами new вы рискуете, что время между ними меняется, поэтому вывод не согласован.
  • 0
    единственное возможное изменение времени будет между временем, которое печатает час, и миллисекундами. что, давайте будем честными, на самом деле не так уж плохо.
0

Я не уверен, что такое требование, но если вам нужно системное время, возможно, вы можете использовать этот "System.currentTimeMillis()"

0

Calendar.HOUR (или MINUTE, SECOND) - это просто индикатор, который указывает, какое поле мы хотим извлечь из экземпляра Calendar, а не значение, то есть хотим "извлечь HOUR из объекта календаря", как показано ниже:

Calendar c = Calendar.getInstance();

int hour = c.get(Calendar.HOUR_OF_DAY); // in 24-hours,
                                        // or c.get(Calendar.HOUR) in 12-hours.
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);

int weekday = c.get(Calendar.DAY_OF_WEEK);
int weekOfYear = c.get(Calendar.WEEK_OF_YEAR);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню