Chcę uzyskać bieżący znacznik czasu w ten sposób: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Chcę uzyskać bieżący znacznik czasu w ten sposób: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Odpowiedzi:
Z blogu programistów:
System.currentTimeMillis()
to standardowy zegar ścienny (czas i data) wyrażający milisekundy od epoki. Zegar ścienny może być ustawiony przez użytkownika lub sieć telefoniczną (patrz setCurrentTimeMillis (długi) ), aby czas mógł przeskakiwać do tyłu lub do przodu w nieprzewidziany sposób. Tego zegara należy używać tylko wtedy, gdy ważna jest korespondencja z rzeczywistymi datami i godzinami, na przykład w aplikacji kalendarza lub budzika. Pomiary czasu interwału lub upływu czasu powinny wykorzystywać inny zegar. Jeśli używasz System.currentTimeMillis()
, rozważ słuchając ACTION_TIME_TICK
, ACTION_TIME_CHANGED
a ACTION_TIMEZONE_CHANGED
zamierzone transmisje, aby dowiedzieć się, gdy zmienia się czas.
System.nanoTime()
jest to alternatywa System.currentTimeMillis()
i nie ma nieprzewidzianych wahań i jest przeznaczony do pomiaru różnic w czasie trwania.
System.nanoTime()
nie nadaje się do wyświetlania czasu naściennego. W tym celu użyj System.currentTimeMillis()
zamiast tego.
1320917972 jest uniksowym znacznikiem czasu używającym liczby sekund od 00:00:00 UTC 1 stycznia 1970 r. Możesz użyć TimeUnit
klasy do konwersji jednostek - od System.currentTimeMillis()
do sekund.
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
Możesz użyć klasy SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Użyj poniższej metody, aby uzyskać aktualny znacznik czasu. Działa dla mnie dobrze.
/**
*
* @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;
}
}
Oto czytelny dla człowieka znacznik czasu, którego można użyć w nazwie pliku, na wypadek, gdyby ktoś potrzebował tego samego, czego potrzebowałem:
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;
}
}
Spróbuj tych
time.setText(String.valueOf(System.currentTimeMillis()));
i timeStamp do formatu czasu
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
Chciałbym przekazać nowoczesną odpowiedź.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
Dane wyjściowe po uruchomieniu:
1543320466
Podczas gdy dzielenie przez 1000 nie będzie dla wielu zaskoczeniem, samodzielne konwersje czasu mogą być trudne do odczytania dość szybko, więc jest to zły nawyk, kiedy możesz tego uniknąć.
Instant
Klasa używam jest częścią java.time, nowoczesny daty i czasu Java API. Jest wbudowany w nowe wersje Androida, API poziom 26 i nowsze. Jeśli programujesz dla starszego Androida, możesz uzyskać backport, patrz poniżej. Jeśli nie chcesz tego robić, co zrozumiałe, nadal używałbym wbudowanej konwersji:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
To jest to samo, co odpowiedź Sealskej. Dane wyjściowe są takie same jak poprzednio.
Tak, java.time działa ładnie na starszych i nowszych urządzeniach z Androidem. Wymaga tylko co najmniej Java 6 .
org.threeten.bp
z podpakietów.java.time
.java.time
został po raz pierwszy opisany.java.time
do Java 6 i 7 (ThreeTen dla JSR-310).Sugeruję użycie odpowiedzi Hitsa, ale dodając format ustawień regionalnych, tak programiści Androida zalecają :
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;
}
Ten kod jest wersją Kotlin. Mam inny pomysł, aby dodać losową liczbę całkowitą losową w ostatniej cyfrze, aby podać czas epoki wariancji.
Wersja Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Myślę, że lepiej będzie użyć tego kodu, niż zależy od wersji Androida 26 lub wyższej
java.util.Date
,java.util.Calendar
iTimestamp
są teraz Legacy, wyparta przez java.time klas. Większość funkcji java.time jest przeniesiona z powrotem do Java 6 i Java 7 w projekcie ThreeTen-Backport . Dalsze dostosowanie do wcześniejszego Androida w projekcie ThreeTenABP . Zobacz Jak korzystać z ThreeTenABP… .