Ниже мой код.
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. Что я здесь делаю неправильно?
Благодарю.
Ваш код - это просто конкатенация констант, которые календарь определяет, чтобы идентифицировать некоторые из его полей. Чтобы получить значения этих полей, вызовите 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()
.
Calendar
здесь - это класс, а не имя переменной ссылки на экземпляр, поэтому вызов нестатического метода get(int field)
не будет компилироваться.
Calendar.HOUR
, Calendar.MINUTE
и Calendar.SECOND
- это public static int
field класса Calendar
. Их значение
Ваша String
конкатенация просто добавив эти значения. Чтобы читать из Calendar
вы могли бы что-то подобное
calendar.get(Calendar.HOUR);
calendar.get(Calendar.MINUTE);
Для тех, у кого все еще есть проблемы с этим, как и я, особенно когда вы хотите печатать несколько раз, вам может понадобиться использовать новые, например, следующие:
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));
13:6:5:96
. Это то, что вы хотели? Также с несколькими вызовами new
вы рискуете, что время между ними меняется, поэтому вывод не согласован.
Я не уверен, что такое требование, но если вам нужно системное время, возможно, вы можете использовать этот "System.currentTimeMillis()"
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);