Конвертировать временную метку в текущую дату в android
У меня проблема с отображением даты, я получаю timestamp как 1379487711, но в соответствии с этим фактическое время составляет 9/18/2013 12:31:51 PM, но оно отображает время как 17-41-1970. Как показать это как текущее время.
для отображения времени Я использовал следующий метод:
private String getDate(long milliSeconds) {
// Create a DateFormatter object for displaying date in specified
// format.
SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
// Create a calendar object that will convert the date and time value in
// milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis((int) milliSeconds);
return formatter.format(calendar.getTime());
}
Ответы
Ответ 1
private String getDate(long time) {
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(time * 1000);
String date = DateFormat.format("dd-MM-yyyy", cal).toString();
return date;
}
обратите внимание, что я помещаю время в setTimeInMillis как длинное, а не как int, обратите внимание, что мой формат даты имеет ММ, а не мм (мм для минут, а не месяцев, поэтому у вас есть значение "41", где месяцы должны быть )
Ответ 2
конвертировать временную метку в текущую дату:
private Date getDate(long time) {
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();//get your local time zone.
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
sdf.setTimeZone(tz);//set time zone.
String localTime = sdf.format(new Date(time) * 1000));
Date date = new Date();
try {
date = sdf.parse(localTime);//get local date
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
Ответ 3
Для преобразования метки времени в текущее время
Calendar calendar = Calendar.getInstance();
TimeZone tz = TimeZone.getDefault();
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
java.util.Date currenTimeZone=new java.util.Date((long)1379487711*1000);
Toast.makeText(TimeStampChkActivity.this, sdf.format(currenTimeZone), Toast.LENGTH_SHORT).show();
Ответ 4
Если ваш результат всегда возвращает 1970, попробуйте так:
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(timestamp * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", cal).toString();
Вам нужно умножить значение TS на 1000
Его так легко использовать.
Ответ 5
DateFormat df = new SimpleDateFormat("HH:mm", Locale.US);
final String time_chat_s = df.format(time_stamp_value);
Тип переменной time_stamp_value длинный
С вашим кодом он будет выглядеть примерно так:
private String getDate(long time_stamp_server) {
SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
return formatter.format(time_stamp_server);
}
Я меняю "миллисекунды" на time_stamp_server. Подумайте об изменении имени миллисекунды на "c" или на нечто более глобальное. "c" действительно хорош, потому что он относится к времени и к вычислениям гораздо более глобальным способом, чем миллисекунды. Таким образом, вам не обязательно нужен объект календаря для преобразования, и он должен быть таким простым.
Ответ 6
Если вы хотите, чтобы сообщение чата в чате выглядело как приложение, используйте метод ниже. формат даты, который вы хотите изменить в соответствии с вашим требованием.
public String DateFunction(long timestamp, boolean isToday)
{
String sDate="";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
Calendar c = Calendar.getInstance();
Date netDate = null;
try {
netDate = (new Date(timestamp));
sdf.format(netDate);
sDate = sdf.format(netDate);
String currentDateTimeString = sdf.format(c.getTime());
c.add(Calendar.DATE, -1);
String yesterdayDateTimeString = sdf.format(c.getTime());
if(currentDateTimeString.equals(sDate) && isToday) {
sDate = "Today";
} else if(yesterdayDateTimeString.equals(sDate) && isToday) {
sDate = "Yesterday";
}
} catch (Exception e) {
System.err.println("There an error in the Date!");
}
return sDate;
}
Ответ 7
ТЛ; др
С 1970-01-01T00:00:00Z
вас есть целое количество секунд, а не миллисекунд.
Instant
.ofEpochSecond( 1_379_487_711L )
.atZone(
ZoneId.of( "Africa/Tunis" )
)
.toLocalDate()
.format(
DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)
2013-09-18T07: 01: 51Z
Целые секунды против Миллисекунд
Как указано выше, вы перепутали количество секунд с количеством миллисекунд.
Использование java.time
Другие ответы могут быть правильными, но устарели. Используемые там проблемные старые классы даты и времени теперь унаследованы и заменены классами java.time. Для Android см. Последние пункты ниже.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).
Instant instant = Instant.ofEpochSecond( 1_379_487_711L ) ;
instant.toString(): 2013-09-18T07: 01: 51Z
Примените часовой пояс, через который вы хотите просмотреть этот момент.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString(): 2013-09-18T03: 01: 51-04: 00 [Америка/Монреаль]
Создайте строку, представляющую это значение в желаемом формате.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = zdt.format( f ) ;
18-09-2013
Смотрите этот код в прямом эфире на IdeOne.com.
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Ответ 8
Я получил это отсюда: http://www.java2s.com/Code/Android/Date-Type/CreateDatefromtimestamp.htm
Ни один из приведенных выше ответов не работал для меня.
Calendar c = Calendar.getInstance();
c.setTimeInMillis(Integer.parseInt(tripBookedTime) * 1000L);
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy");
return sdf.format(d);
И кстати: ("dd-MM-yyyy", cal)
не распознается Android - "Не удается разрешить метод".