답변:
개발자 블로그에서 :
System.currentTimeMillis()
신기원 이후의 밀리 초를 나타내는 표준 "벽"시계 (시간 및 날짜)입니다. 벽시계는 사용자 또는 전화 네트워크에서 설정할 수 있으므로 ( setCurrentTimeMillis (long) 참조 ) 시간이 예상치 않게 뒤로 또는 앞으로 이동할 수 있습니다. 이 시계는 달력 또는 알람 시계 응용 프로그램과 같이 실제 날짜 및 시간과의 통신이 중요한 경우에만 사용해야합니다. 간격 또는 경과 시간 측정은 다른 시계를 사용해야합니다. 을 (를) 사용 System.currentTimeMillis()
하는 경우 ACTION_TIME_TICK
, ACTION_TIME_CHANGED
및 ACTION_TIMEZONE_CHANGED
의도 방송을 듣고 시간이 변경되는시기를 알아보십시오.
System.nanoTime()
의 대안 System.currentTimeMillis()
과는 전혀 예측할 수없는 변동이 없으며, 시간 차이를 측정하기 위해 설계되었습니다.
System.nanoTime()
벽시계 시간을 표시하기에 적합하지 않은 @ ana01의 주석에 대한 메모 . 이를 위해 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;
}
}
나는 현대의 답변에 기여하고 싶습니다.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
지금 바로 실행할 때 출력 :
1543320466
1000으로 나누는 것이 많은 사람들에게는 놀라운 일이 아니지만 자신의 시간 변환을 수행하면 읽기가 매우 어려워 질 수 있으므로 피할 수 없을 때 나쁜 습관이됩니다.
Instant
내가 사용 하는 클래스는 현대 Java 날짜 및 시간 API 인 java.time의 일부입니다. 새로운 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 Backport 프로젝트 (ThreeTen for JSR-310).Hits의 답변을 사용하는 것이 좋지만 로케일 형식을 추가하면 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
나는이 kode를 사용하는 것이 더 좋을 것이라고 생각하고 안드로이드 버전 26 이상에 의존합니다.
java.util.Date
,java.util.Calendar
그리고Timestamp
에 의해 대체 지금 레거시, java.time의 클래스. 대부분의 java.time 기능은 ThreeTen-Backport 프로젝트 에서 Java 6 & Java 7로 백 포트됩니다 . ThreeTenABP 프로젝트 에서 이전 Android에 더 적합합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .