Android получить текущую метку времени? - PullRequest
218 голосов
/ 10 ноября 2011

Я хочу получить текущую метку времени следующим образом: 1320917972

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();

Ответы [ 11 ]

262 голосов
/ 12 августа 2014

Решение:

Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
79 голосов
/ 10 ноября 2011

От разработчиков блога:

System.currentTimeMillis() - это стандартные «настенные» часы (время и дата), выражающие миллисекунды с начала эпохи. Настенные часы могут быть установлены пользователем или телефонной сетью (см. setCurrentTimeMillis (long) ), поэтому время может непредсказуемо прыгать назад или вперед. Эти часы следует использовать только тогда, когда важна переписка с реальными датами и временем, например, в приложении с календарем или будильником. Для измерения интервала или истекшего времени следует использовать другие часы. Если вы используете System.currentTimeMillis(), рассмотрите возможность прослушивания трансляций ACTION_TIME_TICK, ACTION_TIME_CHANGED и ACTION_TIMEZONE_CHANGED Intent, чтобы узнать, когда изменится время.

30 голосов
/ 14 июня 2016

1320917972 - это метка времени Unix, использующая количество секунд с 00:00:00 UTC 1 января 1970 года. Вы можете использовать класс TimeUnit для преобразования единиц - от System.currentTimeMillis() до секунд.

String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
26 голосов
/ 26 апреля 2013

Вы можете использовать SimpleDateFormat класс:

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
22 голосов
/ 06 марта 2014

Используйте метод ниже, чтобы получить текущую отметку времени. У меня отлично работает.

/**
 * 
 * @return yyyy-MM-dd HH:mm:ss formate date as string
 */
public static String getCurrentTimeStamp(){
    try {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateTime = dateFormat.format(new Date()); // Find todays date

        return currentDateTime;
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }
}
11 голосов
/ 25 октября 2016

Это простое использование:

long millis = new Date().getTime();

если вы хотите использовать его в определенном формате, тогда вам нужен Formatter, как показано ниже

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());
8 голосов
/ 03 октября 2014

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

package com.example.xyz;

import android.text.format.Time;

/**
 * Clock utility.
 */
public class Clock {

    /**
     * Get current time in human-readable form.
     * @return current time as a string.
     */
    public static String getNow() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d %T");
        return sTime;
    }
    /**
     * Get current time in human-readable form without spaces and special characters.
     * The returned value may be used to compose a file name.
     * @return current time as a string.
     */
    public static String getTimeStamp() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d_%H_%M_%S");
        return sTime;
    }

}
2 голосов
/ 27 ноября 2018

java.time

Я хотел бы предложить современный ответ.

    String ts = String.valueOf(Instant.now().getEpochSecond());
    System.out.println(ts);

Вывод при запуске только сейчас:

1543320466

Несмотря на то, что деление на 1000 не станет неожиданностью для многих, выполнение ваших собственных преобразований времени может быть затруднено для довольно быстрого чтения, поэтому это плохая привычка, когда вы можете избежать этого.

Класс Instant, который я использую, является частью java.time, современного Java-API даты и времени. Он встроен в новые версии Android, API уровня 26 и выше. Если вы программируете для более старого Android, вы можете получить бэкпорт, см. Ниже. Если вы не хотите этого делать, понятно, что я по-прежнему буду использовать встроенное преобразование:

    String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
    System.out.println(ts);

Это так же, как ответ от sealskej. Вывод такой же, как и раньше.

Вопрос: Могу ли я использовать java.time на Android?

Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

2 голосов
/ 28 марта 2018

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

long millis = new Date().getTime();

, чтобы получить текущее время в длинных миллис

0 голосов
/ 27 ноября 2018

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

time.setText(String.valueOf(System.currentTimeMillis()));

и метку времени в формате времени

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
...