ฉันต้องการได้รับการประทับเวลาปัจจุบันเช่นนั้น: 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 timestamp โดยใช้จำนวนวินาทีตั้งแต่ 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;
}
}
มันใช้ง่าย:
long millis = new Date().getTime();
หากคุณต้องการในรูปแบบเฉพาะคุณต้องฟอร์แมตเตอร์ด้านล่าง
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString = dateFormat.format(new Date());
นี่คือการประทับเวลาที่มนุษย์สามารถอ่านได้ซึ่งอาจใช้ในชื่อไฟล์ในกรณีที่บางคนต้องการสิ่งเดียวกันกับที่ฉันต้องการ:
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()));
และ timeStamp เป็นรูปแบบเวลา
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
ในขณะที่การหารด้วย 1,000 จะไม่แปลกใจสำหรับหลาย ๆ คนการแปลงเวลาของคุณเองอาจทำให้อ่านยากได้ค่อนข้างเร็วดังนั้นจึงเป็นนิสัยที่ไม่ดีเมื่อคุณสามารถหลีกเลี่ยงได้
Instant
ชั้นเรียนที่ผมใช้เป็นส่วนหนึ่งของ java.time วันที่ Java ที่ทันสมัยและเวลา API มันมีอยู่แล้วในเวอร์ชัน Android ใหม่ระดับ API 26 ขึ้นไป หากคุณกำลังเขียนโปรแกรมสำหรับ Android รุ่นเก่าคุณอาจได้รับ backport ดูด้านล่าง หากคุณไม่ต้องการทำอย่างนั้นฉันก็ยังคงใช้การแปลงในตัว:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
นี่เป็นเช่นเดียวกับคำตอบของแมวน้ำ เอาท์พุทเหมือนเดิม
ใช่ java.time ทำงานได้ดีบนอุปกรณ์ Android รุ่นเก่าและใหม่กว่า มันก็ต้องมีอย่างน้อยJava 6
org.threeten.bp
ด้วยแพ็กเกจย่อยjava.time
อธิบายวิธีการใช้งานjava.time
ถูกอธิบายครั้งแรกjava.time
ไปยัง Java 6 และ 7 (ThreeTen สำหรับ JSR-310)ทางออกใน Kotlin:
val nowInEpoch = Instant.now().epochSecond
ตรวจสอบว่าเวอร์ชั่น SDK ต่ำสุดของคุณคือ 26
ฉันแนะนำให้ใช้คำตอบของ 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 ฉันมีความคิดอื่นที่จะเพิ่มจำนวนสุ่มแบบสุ่มในหลักสุดท้ายสำหรับการให้เวลาความแปรปรวน
รุ่น Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
ฉันคิดว่ามันจะดีกว่าถ้าใช้ kode นี้จากนั้นขึ้นอยู่กับ Android เวอร์ชัน 26 ขึ้นไป
java.util.Date
,java.util.Calendar
และTimestamp
ตอนนี้มรดกแทนที่ด้วยjava.timeชั้นเรียน ส่วนใหญ่ของjava.timeการทำงานจะกลับรังเพลิง Java 6 & Java 7 ในThreeTen-ย้ายกลับโครงการ ดัดแปลงเพิ่มเติมสำหรับ Android รุ่นก่อนหน้าในโครงการThreeTenABP ดูวิธีการใช้ ThreeTenABP … .