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

Конвертировать временную метку в текущую дату в 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());
} 
4b9b3361

Ответ 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?

  • Java SE 8, Java SE 9 и более поздние
    • Встроенный.
    • Часть стандартного Java API с комплексной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
  • Android

Проект 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 - "Не удается разрешить метод".