Tôi có một ngày tháng bên trong một chuỗi, chẳng hạn như "12-12-2012". Làm cách nào để chuyển đổi giá trị này thành mili giây (dài)?
Tôi có một ngày tháng bên trong một chuỗi, chẳng hạn như "12-12-2012". Làm cách nào để chuyển đổi giá trị này thành mili giây (dài)?
Câu trả lời:
Sử dụng SimpleDateFormat
String string_date = "12-December-2012";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date d = f.parse(string_date);
long milliseconds = d.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
Đã đến lúc ai đó cung cấp câu trả lời hiện đại cho câu hỏi này. Vào năm 2012 khi câu hỏi được đưa ra, các câu trả lời cũng được đăng lại sau đó là những câu trả lời tốt. Tại sao các câu trả lời được đăng vào năm 2016 cũng sử dụng các lớp đã lỗi thời từ lâu SimpleDateFormat
và Date
đối với tôi là một điều bí ẩn hơn một chút. java.time
, API ngày và giờ Java hiện đại còn được gọi là JSR-310, rất dễ làm việc với nó. Bạn có thể sử dụng nó trên Android thông qua ThreeTenABP, hãy xem câu hỏi này: Cách sử dụng ThreeTenABP trong Android Project .
Đối với hầu hết các mục đích, tôi khuyên bạn nên sử dụng mili giây kể từ kỷ nguyên đầu ngày theo giờ UTC . Để có được những thứ này:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
String stringDate = "12-December-2012";
long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
System.out.println(millisecondsSinceEpoch);
Bản in này:
1355270400000
Nếu bạn yêu cầu thời gian vào đầu ngày ở một số múi giờ cụ thể, hãy chỉ định múi giờ đó thay vì UTC, ví dụ:
.atStartOfDay(ZoneId.of("Asia/Karachi"))
Như mong đợi, điều này cho một kết quả hơi khác:
1355252400000
Một điểm khác cần lưu ý, hãy nhớ cung cấp ngôn ngữ cho bạn DateTimeFormatter
. Tôi lấy tháng 12 là tiếng Anh, có những ngôn ngữ khác mà tháng đó được gọi là giống nhau, vì vậy hãy tự mình chọn ngôn ngữ phù hợp. Nếu bạn không cung cấp ngôn ngữ, trình định dạng sẽ sử dụng cài đặt ngôn ngữ của JVM, cài đặt này có thể hoạt động trong nhiều trường hợp và sau đó bất ngờ bị lỗi vào một ngày nào đó khi bạn chạy ứng dụng của mình trên một thiết bị có cài đặt ngôn ngữ khác.
java.util.Date
sử dụng trình định dạng ngàyCách dễ nhất là sử dụng Ngày sử dụng Ngày () và getTime ()
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)
bằng cách sử dụng định dạng đơn giản, bạn có thể dễ dàng đạt được nó.
1) Đầu tiên chuyển đổi chuỗi thành java.Date bằng cách sử dụng simpledateformatter.
2) Sử dụng phương thức getTime để có được số mili giây kể từ ngày
public class test {
public static void main(String[] args) {
String currentDate = "01-March-2016";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
Date parseDate = f.parse(currentDate);
long milliseconds = parseDate.getTime();
}
}
thêm Ví dụ bấm vào đây
Hãy thử mã bên dưới
SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long timeInMillis = d.getTime();