Как я могу получить дату в формате 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

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

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

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

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

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

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

DAY_OF_MONTH , MONTH , .. и т. Д. – это просто константа int, используемая классом Calendar внутри

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

Использовать SimpleDateFormat

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

Что не так:

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


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

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

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

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

  Date date = new Date(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy"); String s = formatter.format(date); System.out.println(s); 
 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)); 

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

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

Используйте 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 

Документация: строка формата .