Я хочу отримати поточну позначку часу таким чином: 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 (довгий) ), тому час може непередбачувано стрибати назад або вперед. Цей годинник слід використовувати лише тоді, коли важливі кореспонденція з реальними датами та часом, наприклад у календарі чи програмі будильника. Для інтервальних або минулих вимірювань часу слід використовувати інший годинник. Якщо ви використовуєте 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).Я пропоную скористатися відповіддю хітів, але додавши формат локальної локації, ось що розробники 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;
}
Цей код - версія Котліна. У мене є ще одна ідея додати ціле число випадкового перетасування в останню цифру, щоб дати час епохи варіації.
Версія Котліна
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Я думаю, що краще буде скористатися цим кодом, а потім залежати від андроїд версії 26 або більше
java.util.Date
,java.util.Calendar
іTimestamp
тепер спадщина, витісняється java.time класів. Більшість функцій java.time повертається назад до Java 6 та Java 7 у проекті ThreeTen-Backport . Далі адаптовано до попереднього Android у проекті ThreeTenABP . Див. Як користуватися ThreeTenABP… .