Tôi muốn lấy dấu thời gian hiện tại như thế: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Tôi muốn lấy dấu thời gian hiện tại như thế: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Câu trả lời:
Từ blog của nhà phát triển:
System.currentTimeMillis()
là đồng hồ "tường" tiêu chuẩn (thời gian và ngày) biểu thị mili giây kể từ thời đại. Đồng hồ treo tường có thể được đặt bởi người dùng hoặc mạng điện thoại (xem setCienTimeMillis (dài) ), do đó thời gian có thể nhảy lùi hoặc chuyển tiếp một cách khó lường. Đồng hồ này chỉ nên được sử dụng khi sự tương ứng với ngày và giờ trong thế giới thực là quan trọng, chẳng hạn như trong ứng dụng lịch hoặc đồng hồ báo thức. Các phép đo thời gian trôi qua hoặc thời gian trôi qua nên sử dụng một đồng hồ khác. Nếu bạn đang sử dụng System.currentTimeMillis()
, hãy cân nhắc lắng nghe ACTION_TIME_TICK
, ACTION_TIME_CHANGED
và ACTION_TIMEZONE_CHANGED
chương trình phát sóng ý định tìm hiểu khi thời gian thay đổi.
System.nanoTime()
là một giải pháp thay thế System.currentTimeMillis()
và nó không có biến động khó lường và được thiết kế để đo sự khác biệt về thời lượng.
System.nanoTime()
không phù hợp để hiển thị thời gian trên đồng hồ treo tường. Đối với mục đích đó, sử dụng System.currentTimeMillis()
thay thế.
Bạn có thể sử dụng lớp SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Sử dụng phương pháp dưới đây để có được dấu thời gian hiện tại. Việc này ổn với tôi.
/**
*
* @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;
}
}
Đây là dấu thời gian có thể đọc được của con người có thể được sử dụng trong tên tệp, chỉ trong trường hợp ai đó cần điều tương tự mà tôi cần:
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;
}
}
Thử những thứ này xem
time.setText(String.valueOf(System.currentTimeMillis()));
và timeStamp để định dạng thời gian
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
Tôi muốn đóng góp câu trả lời hiện đại.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
Đầu ra khi chạy ngay bây giờ:
1543320466
Mặc dù việc chia cho 1000 sẽ không gây ngạc nhiên cho nhiều người, nhưng việc chuyển đổi thời gian của riêng bạn có thể khó đọc khá nhanh, do đó, đó là một thói quen xấu khi bạn có thể tránh được.
Các Instant
lớp mà tôi đang sử dụng là một phần của java.time, ngày Java hiện đại và thời gian API. Nó được tích hợp sẵn trên các phiên bản Android mới, API cấp 26 trở lên. Nếu bạn đang lập trình cho Android cũ hơn, bạn có thể nhận được backport, xem bên dưới. Nếu bạn không muốn làm điều đó, có thể hiểu được, tôi vẫn sử dụng chuyển đổi tích hợp:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
Điều này giống như câu trả lời của sealskej. Đầu ra giống như trước đây.
Có, java.time hoạt động độc đáo trên các thiết bị Android cũ hơn và mới hơn. Nó chỉ cần ít nhất Java 6 .
org.threeten.bp
với các gói con.java.time
.java.time
được mô tả lần đầu tiên.java.time
Java 6 và 7 (ThreeTen cho JSR-310).Tôi khuyên bạn nên sử dụng câu trả lời của Lượt truy cập, nhưng thêm định dạng Địa điểm, đây là cách Nhà phát triển Android khuyên dùng :
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;
}
Mã này là phiên bản Kotlin. Tôi có một ý tưởng khác để thêm một số nguyên ngẫu nhiên ngẫu nhiên trong chữ số cuối cùng để đưa ra thời gian kỷ nguyên phương sai.
Phiên bản Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Tôi nghĩ sẽ tốt hơn khi sử dụng kode này sau đó phụ thuộc vào phiên bản Android 26 trở lên
java.util.Date
,java.util.Calendar
vàTimestamp
bây giờ là di sản, thay thế bởi sự java.time lớp. Hầu hết các chức năng java.time được chuyển ngược lại sang Java 6 & Java 7 trong dự án ThreeTen-Backport . Thích nghi hơn nữa cho Android trước đó trong dự án ThreeTenABP . Xem Cách sử dụng ThreeTenABP .