2016-05-03 3 views
-1

Привет, У меня есть требование, когда мне нужно проверить дату с системным значением даты, но значение даты, которое у меня есть в БД, равно миллисекундам, поэтому ниже мой код, но проблема - это системная дата, получить значение месяца отображения неверно, его значение месяца отображения на один месяц меньше.Как получить дату из миллисекунд

Date now = new Date(); 
    Long nowLong = now.getTime()/1000; 
    Integer unixTime = nowLong.intValue(); 

    Calendar cal; 
    cal = Calendar.getInstance(); 
    cal.setTimeInMillis(unixTime * 1000L); 

    Integer day = cal.get(Calendar.DAY_OF_MONTH); 
    Integer month = cal.get(Calendar.MONTH); 
    Integer hour = cal.get(Calendar.HOUR); 
    Integer minute = cal.get(Calendar.MINUTE); 
    String amPm = (cal.get(Calendar.AM_PM) == Calendar.PM) ? "PM" : "AM"; 
    Integer year = cal.get(Calendar.YEAR); 

    System.out.println("day :" + day); 
    System.out.println("month :" + month); 
    System.out.println("hour " + hour); 
    System.out.println("minute " + minute); 
    System.out.println("amPm " + amPm); 
    System.out.println("year " + year); 

Для этого выход дня: 3 месяца: 4 часа 3 минуты 13 AMPM PM года 2016 , но выход не является правильным. Может кто-нибудь мне помочь .

+3

Когда вы говорите, что результат неправильный - что вы ожидали от вывода? –

+0

(i) Почему вы переводите с эпохи миллисов в эпоху, а затем обратно в эпоху миллиса? (i) Почему вы используете объекты вместо примитивов? – assylias

+0

Не используйте 'Integer' вместо' int'. В общем, не используйте 'Date' или' Calendar'. Используйте API даты/времени ([java.time'] (https://docs.oracle.com/javase/tutorial/datetime/iso/index.html)). –

ответ

5

В Java стоимость, возвращаемая cal.get(Calendar.MONTH), составляет . Thenf JANUARY = 0, FEBRUARY = 0 ... (документация here)

Попробуйте это:

Integer month = cal.get(Calendar.MONTH) + 1; 

Или это:

System.out.println("month :" + (month.intValue() + 1)); 

Обратите внимание на создание вашего календаря может быть проще:

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(System.currentTimeMillis()); 
+0

Для Java ** 'Calendar' ** значение, возвращаемое' get (Calendar.MONTH) 'для januari, равно 0. Java как язык не определяет JANUARI. Точка в случае: ['Month.getValue()'] (https://docs.oracle.com/javase/8/docs/api/java/time/Month.html#getValue--) –

0

попробуйте использовать LocalDate. в java 8 было много изменений в Date Time api. Вы можете сделать это лучше с помощью LocalDate.

LocalDate today = LocalDate.now(); //current date 
today.getMonth() //getMonth as a string 
today.getMonth()//getMonthValue in an int 
today.getDayOfWeek() // get the date in a string format 
today.getDayOfMonth() //get the date as an int. 
today.getYear()//get the year 
Смежные вопросы