2014-09-28 2 views
1

Ниже мой код.Java Calendar всегда показывает то же время

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 должен дать мне

общественный статический конечный ИНТ ЧАС номер поля для получения и установки с указанием часа утром или днем ​​ . ЧАС используется для 12-часового такта (0 - 11). Полдень и полночь представлены 0, не на 12. К примеру, в 10: 04: 15,250 PM ЧАС является 10.

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

Спасибо.

+0

Что вы на самом деле пытаетесь достичь? Если вы просто пытаетесь получить уникальное значение, то переход к второму вряд ли достигнет его в любом случае - но вы можете сделать это без какой-либо обработки строк или доступа к календарю. –

+0

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

+0

@Jayaraj, используя миллисекунды, приводит к увеличению _precision_, но во многих случаях все еще не является «уникальным». –

ответ

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

«Календарь» - это класс, а не имя переменной ссылки на экземпляр, поэтому вызов нестатического метода 'get (int field)' не будет компилироваться. –

+0

@WilliamPrice. Должен ли я сделать getInstance of Calendar, а затем сделать getmethod? – Kraken

+0

, конечно, набрал слишком быстро. исправлено. –

3

Calendar.HOUR, Calendar.MINUTE и Calendar.SECOND являются public static int поле Calendar класса. Их значение

  • CALENDAR.HOUR: 10
  • CALENDAR.MINUTE: 12 и
  • CALENDAR.SECOND: 13.

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

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

Calendar.HOUR (или MINUTE, SECOND) является лишь показателем того, что указывает на то, какое поле мы хотим извлечь из Calendar экземпляра, а не значение, то есть мы хотим, чтобы «извлечь ЧАС из календаря объекта», как показано ниже:

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); 
0

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

Смежные вопросы