Подтвердить что ты не робот

Как я могу получить дату в формате MM/DD/YY из Timestamp

Я хочу получить дату в формате MM/DD/YY из метки времени.

Я использовал метод ниже, но он не дает правильный вывод

final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(Long.parseLong(1306249409));    
Log.d("Date--",""+cal.DAY_OF_MONTH);    
Log.d("Month--",""+cal.MONTH);    
Log.d("Year--",""+cal.YEAR);

Но он дает вывод, как показано ниже

Дата - 5 Месяц - 2 Год - 1

Правильная дата 24 мая 2010 года для отметки времени - 1306249409

Примечание. Временная метка получена веб-службой, которая используется в моем приложении.

4b9b3361

Ответ 1

Лучший подход

Просто используйте SimpleDateFormat

new SimpleDateFormat("MM/dd/yyyy").format(new Date(timeStampMillisInLong));

Ошибка в вашем подходе

DAY_OF_MONTH, MONTH,.. и т.д. - это просто константное значение int, используемое классом Calendar внутри

Вы можете получить дату, представленную cal, на cal.get(Calendar.DATE)

Ответ 2

Используйте SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String time = sdf.format(date);

Ответ 3

Что не так:

Calendar.DAY_OF_MONTH, Calendar.MONTH и т.д. являются статическими константами, используемыми для доступа к этим конкретным полям. (Они останутся постоянными, независимо от того, что setTimeInMillis вы предоставляете.)


Как его решить:

Чтобы получить эти конкретные поля, вы можете использовать .get(int field) -method, например:

Log.d("Month--",""+cal.get(Calendar.MONTH));

Как указывали другие, существуют более удобные способы форматирования даты регистрации. Вы можете использовать, например, SimpleDateFormat, или, как я обычно делаю при регистрации, форматированную строку и String.format(formatStr, Calendar.getInstance()).

Ответ 4

        Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
    String s = formatter.format(date);
    System.out.println(s);

Ответ 5

TimeZone utc = TimeZone.getTimeZone("UTC"); // avoiding local time zone overhead
final Calendar cal = new GregorianCalendar(utc);

// always use GregorianCalendar explicitly if you don't want be suprised with
// Japanese Imperial Calendar or something

cal.setTimeInMillis(1306249409L*1000); // input need to be in miliseconds

Log.d("Date--",""+cal.get(Calendar.DAY_OF_MONTH));

Log.d("Month--",""+cal.get(Calendar.MONTH) + 1); // it starts from zero, add 1

Log.d("Year--",""+cal.get(Calendar.YEAR));

Ответ 6

Java использует количество миллисекунд с 1 января 1970 года для представления времени. Если вы вычислите время, представленное 1306249409 миллисекундами, вы обнаружите, что это всего 362 дня, поэтому ваши предположения ошибочны.

Кроме того, cal.DAY_OF_MONTH содержит константу. Используйте cal.get(Calendar.DAY_OF_MONTH), чтобы получить день месяца (то же самое для других частей даты).

Ответ 7

используйте String.format, который способен конвертировать длинные (миллисекунды) в строку даты/времени в разных форматах:

    String str;
    long time = 1306249409 * 1000L;  // milliseconds
    str = String.format("%1$tm/%1$td/%1$ty", time);  // 05/24/11
    str = String.format("%tF", time);                // 2011-05-24 (ISO 8601)
    str = String.format("Date--%td", time);          // Date--24
    str = String.format("Month--%tm", time);         // Month--05
    str = String.format("Year--%ty", time);          // Year--11

: строка формата.