Я хочу получить текущую временную метку вот так: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Я хочу получить текущую временную метку вот так: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Ответы:
Из блога разработчиков:
System.currentTimeMillis()
это стандартные «настенные» часы (время и дата), выражающие миллисекунды начиная с эпохи. Настенные часы могут быть установлены пользователем или телефонной сетью (см. SetCurrentTimeMillis (long) ), поэтому время может прыгать назад или вперед непредсказуемо. Эти часы следует использовать только в тех случаях, когда важна переписка с реальными датами и временем, например, в приложении с календарем или будильником. Для измерения интервала или истекшего времени следует использовать разные часы. Если вы используете System.currentTimeMillis()
, рассмотреть слушая ACTION_TIME_TICK
, ACTION_TIME_CHANGED
и ACTION_TIMEZONE_CHANGED
Намерение вещание , чтобы узнать , когда меняется время.
System.nanoTime()
он является альтернативой System.currentTimeMillis()
и не имеет непредсказуемых колебаний и предназначен для измерения различий в продолжительности.
System.nanoTime()
которое не подходит для отображения времени на настенных часах. Для этого используйте System.currentTimeMillis()
вместо этого.
1320917972 - это метка времени Unix, использующая количество секунд с 00:00:00 UTC 1 января 1970 года. Вы можете использовать TimeUnit
класс для преобразования единиц измерения - от System.currentTimeMillis()
до секунд.
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
Вы можете использовать класс SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Используйте метод ниже, чтобы получить текущую отметку времени. Он отлично работает для меня.
/**
*
* @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;
}
}
Вот удобочитаемая отметка времени, которая может использоваться в имени файла, на случай, если кому-то понадобится то же, что и мне:
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;
}
}
Попробуйте эти
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);
Я хотел бы внести современный ответ.
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 6 .
org.threeten.bp
подпакетов.java.time
.java.time
был впервые описан.java.time
в Java 6 и 7 (ThreeTen для JSR-310).Я предлагаю использовать ответ Hits, но добавив формат Locale, разработчики Android рекомендуют следующее :
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return dateFormat.format(new Date()); // Find todays date
} catch (Exception e) {
e.printStackTrace();
return null;
}
Этот код является версией Kotlin. У меня есть еще одна идея добавить случайное целое число в последнюю цифру для определения времени эпохи дисперсии.
Котлин версия
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Я думаю, что будет лучше использовать этот код, чем зависит от версии Android 26 или более
java.util.Date
,java.util.Calendar
иTimestamp
теперь наследие, вытесняется java.time классов. Большая часть функциональности java.time перенесена на Java 6 и Java 7 в проекте ThreeTen-Backport . Далее адаптирован для более ранней версии Android в проекте ThreeTenABP . Смотрите Как использовать ThreeTenABP… .