Tôi muốn trừ hai timeperiods nói 16:00:00 từ 19:00:00. Có chức năng java nào cho điều này không? Kết quả có thể bằng mili giây, giây hoặc phút.Cách tính chênh lệch thời gian trong java?
Trả lời
String time1 = "16:00:00";
String time2 = "19:00:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime();
Sự khác biệt bằng mili giây.
Tôi đã sửa đổi sfaizs post.
gì về cách thức khác? 16:00 - 19:00? Làm thế nào tôi có thể tính toán điều này? –
@AlexKapustian bạn đảo ngược các biến ... – Av4t4r
Đảo ngược các biến sẽ không làm tốt lắm .. Trong ví dụ này, chắc chắn, bạn có thể đảo ngược chúng và lấy giá trị tuyệt đối hoặc một cái gì đó. Nhưng điều gì sẽ xảy ra nếu bạn có nửa đêm (00:00)? – rj2700
Giống như bất kỳ ngôn ngữ nào khác; chuyển đổi các khoảng thời gian của bạn thành một dấu thời gian unix (ví dụ, giây kể từ thời đại Unix) và sau đó đơn giản là trừ đi. Sau đó, các giây kết quả sẽ được sử dụng làm dấu thời gian unix mới và đọc được định dạng theo bất kỳ định dạng nào bạn muốn.
Ah, cho các poster trên (genesiss) tín dụng do mình, mã luôn có ích;) Mặc dù, bây giờ bạn có một lời giải thích cũng :)
Cách đau đớn là để chuyển đổi sang millis và làm phép trừ và sau đó trở lại bất cứ giây nào bạn muốn. Cách tốt hơn là sử dụng JodaTime.
Hoặc ... uhm ... unix timestamp?AFAIK Java có các lớp thời gian tốt .. – Christian
Tôi chưa bao giờ đề cập đến dấu thời gian unix. Ngoài ra nó là một thực tế nổi tiếng rằng Java ngày và thời gian API hút cho nhiều hơn sử dụng không thường xuyên. JodaTime là tốt hơn nhiều và có lẽ là con đường để đi cho đến khi JSR 310 là một phần của Java. http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen –
@Manfred Moser: có thể bạn nên có ... Cả hai lớp thời gian Java mặc định và Joda cho thời gian bằng milli bắt đầu từ những gì được gọi là ** Unix ** epoch. Tại thời điểm này họ trở nên gần gũi với ** Unix ** timestamps (một đang được tính bằng millis, cái kia tính bằng giây). Trong mọi trường hợp, những gì OP muốn có thể được thực hiện một cách tầm thường bằng cách sử dụng các lớp Java mặc định, lấy số lượng millis kể từ kỷ nguyên ** Unix ** và trừ đi chúng. – SyntaxT3rr0r
ĐẾN nhận được khá thời gian khác nhau, sau đó
// d1, d2 are dates
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff/1000 % 60;
long diffMinutes = diff/(60 * 1000) % 60;
long diffHours = diff/(60 * 60 * 1000) % 24;
long diffDays = diff/(24 * 60 * 60 * 1000);
System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");
Kỹ thuật tuyệt vời – hadi
câu trả lời thực sự tuyệt vời – Palanivelraghul
Java 8
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime1= LocalDateTime.parse("2014-11-25 19:00:00", formatter);
LocalDateTime dateTime2= LocalDateTime.parse("2014-11-25 16:00:00", formatter);
long diffInMilli = java.time.Duration.between(dateTime1, dateTime2).toMillis();
long diffInSeconds = java.time.Duration.between(dateTime1, dateTime2).getSeconds();
long diffInMinutes = java.time.Duration.between(dateTime1, dateTime2).toMinutes();
Điều này cũng có sẵn cho Java SE 6 và 7 là [cổng sau] (https://github.com/ThreeTen/threetenbp), cũng như cho [Android] (https: // github.com/JakeWharton/ThreeTenABP). – Bryan
import java.util.Date;
...
Date d1 = new Date();
...
...
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime()); //gives the time difference in milliseconds.
System.out.println((d2.getTime()-d1.getTime())/1000); //gives the time difference in seconds.
và, để hiển thị trong một định dạng đẹp hơn, bạn có thể sử dụng:
DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###");
System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000));
Điều này sao y một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có nội dung mới để đóng góp. – DavidPostill
@DavidPostill, cảm ơn bạn đã đầu lên. Nhưng giải pháp tôi cần và không tìm thấy trong bài viết của GENESIS là sự khác biệt thời gian giữa việc thực hiện hai dòng mã (như điểm xuất phát và điểm kết thúc của chương trình hoặc trước và sau khi chạy một phương thức, không phải một số lần tĩnh). Tôi nghĩ điều này có thể hữu ích. – Alisa
Java 8 có cleaner solution - Instant và Duratio n
Ví dụ:
import java.time.Duration;
import java.time.Instant;
...
Instant start = Instant.now();
//your code
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
System.out.println("Time taken: "+ timeElapsed.toMillis() +" milliseconds");
tùy chọn Аlternative nếu thời gian từ những ngày khác nhau được thực hiện, ví dụ: 22:00 và 01:55.
public static long getDiffTime(Date date1, Date date2){
if (date2.getTime() - date1.getTime() < 0) {// if for example date1 = 22:00, date2 = 01:55.
Calendar c = Calendar.getInstance();
c.setTime(date2);
c.add(Calendar.DATE, 1);
date2 = c.getTime();
} //else for example date1 = 01:55, date2 = 03:55.
long ms = date2.getTime() - date1.getTime();
//235 minutes ~ 4 hours for (22:00 -- 01:55).
//120 minutes ~ 2 hours for (01:55 -- 03:55).
return TimeUnit.MINUTES.convert(ms, TimeUnit.MILLISECONDS);
}
/*
* Total time calculation.
*/
private void getTotalHours() {
try {
// TODO Auto-generated method stub
if (tfTimeIn.getValue() != null && tfTimeOut.getValue() != null) {
Long min1 = tfTimeOut.getMinutesValue();
Long min2 = tfTimeIn.getMinutesValue();
Long hr1 = tfTimeOut.getHoursValue();
Long hr2 = tfTimeIn.getHoursValue();
Long hrsTotal = new Long("0");
Long minTotal = new Long("0");
if ((hr2 - hr1) == 1) {
hrsTotal = (long) 1;
if (min1 != 0 && min2 == 0) {
minTotal = (long) 60 - min1;
} else if (min1 == 0 && min2 != 0) {
minTotal = min2;
} else if (min1 != 0 && min2 != 0) {
minTotal = min2;
Long minOne = (long) 60 - min1;
Long minTwo = min2;
minTotal = minOne + minTwo;
}
if (minTotal >= 60) {
hrsTotal++;
minTotal = minTotal % 60;
}
} else if ((hr2 - hr1) > 0) {
hrsTotal = (hr2 - hr1);
if (min1 != 0 && min2 == 0) {
minTotal = (long) 60 - min1;
} else if (min1 == 0 && min2 != 0) {
minTotal = min2;
} else if (min1 != 0 && min2 != 0) {
minTotal = min2;
Long minOne = (long) 60 - min1;
Long minTwo = min2;
minTotal = minOne + minTwo;
}
if (minTotal >= 60) {
minTotal = minTotal % 60;
}
} else if ((hr2 - hr1) == 0) {
if (min1 != 0 || min2 != 0) {
if (min2 > min1) {
hrsTotal = (long) 0;
minTotal = min2 - min1;
} else {
Notification.show("Enter A Valid Time");
tfTotalTime.setValue("00.00");
}
}
} else {
Notification.show("Enter A Valid Time");
tfTotalTime.setValue("00.00");
}
String hrsTotalString = hrsTotal.toString();
String minTotalString = minTotal.toString();
if (hrsTotalString.trim().length() == 1) {
hrsTotalString = "0" + hrsTotalString;
}
if (minTotalString.trim().length() == 1) {
minTotalString = "0" + minTotalString;
}
tfTotalTime.setValue(hrsTotalString + ":" + minTotalString);
} else {
tfTotalTime.setValue("00.00");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung liên quan đến * lý do * và/hoặc * cách * mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. –
lớp TimeCalculator { Chuỗi updateTime;
public TimeCalculator(String time)
{
// time should be in 24 hours format like 15/06/2016 17:39:20
this.updateTime = time;
}
public String getTimeDifference()
{
String td=null;
// get Current Time
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Date currentDate = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(currentDate);
int c_year = calendar.get(Calendar.YEAR);
int c_month = calendar.get(Calendar.MONTH) + 1;
int c_day = calendar.get(Calendar.DAY_OF_MONTH);
// get Editing Time
Date edit_date = sdf.parse(updateTime);
Calendar edit_calendar = new GregorianCalendar();
edit_calendar.setTime(edit_date);
int e_year = edit_calendar.get(Calendar.YEAR);
int e_month = edit_calendar.get(Calendar.MONTH) + 1;
int e_day = edit_calendar.get(Calendar.DAY_OF_MONTH);
if(e_year==c_year&&e_month==c_month&&e_day==c_day)
{
int c_hours = calendar.get(Calendar.HOUR_OF_DAY);
int c_minutes = calendar.get(Calendar.MINUTE);
int c_seconds = calendar.get(Calendar.SECOND);
int e_hours = edit_calendar.get(Calendar.HOUR_OF_DAY);
int e_minutes = edit_calendar.get(Calendar.MINUTE);
int e_seconds = edit_calendar.get(Calendar.SECOND);
if(c_hours==e_hours&&c_minutes==e_minutes&&c_seconds==e_seconds)
{
td = "just now";
return td;
}
else if(c_hours==e_hours&&c_minutes==e_minutes)
{
int d_seconds = c_seconds-e_seconds;
td = String.valueOf(d_seconds);
td = td+" seconds ago";
return td;
}
else if(c_hours==e_hours&&c_minutes!=e_minutes)
{
int d_minutes = c_minutes-e_minutes;
int d_seconds;
if(c_seconds>e_seconds)
{
d_seconds = c_seconds-e_seconds;
}else{
d_seconds = e_seconds-c_seconds;
}
td = "00:"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago";
return td;
}
else
{
int d_minutes,d_seconds,d_hours;
d_hours=c_hours-e_hours;
if(c_minutes>e_minutes)
{
d_minutes = c_minutes-e_minutes;
}else{
d_minutes = e_minutes-c_minutes;
}
if(c_seconds>e_seconds)
{
d_seconds = c_seconds-e_seconds;
}else{
d_seconds = e_seconds-c_seconds;
}
td = String.valueOf(d_hours)+":"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago";
return td;
}
}
else if(e_year==c_year&&e_month==c_month&&c_day==e_day+1){
td = "yesterday";
return td;
}
else{
td = updateTime;
return td;
}
}}
String start = "12:00:00";
String end = "02:05:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(start);
Date date2 = format.parse(end);
long difference = date2.getTime() - date1.getTime();
int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);
if(minutes<0)minutes += 1440;
Bây giờ phút sẽ là thời gian chính xác giữa hai thời gian (trong phút).
public class timeDifference {
public static void main(String[] args) {
try {
Date startTime = Calendar.getInstance().getTime();
Thread.sleep(10000);
Date endTime = Calendar.getInstance().getTime();
long difference = endTime.getTime() - startTime.getTime();
long differenceSeconds = difference/1000 % 60;
long differenceMinutes = difference/(60 * 1000) % 60;
long differenceHours = difference/(60 * 60 * 1000) % 24;
long differenceDays = difference/(24 * 60 * 60 * 1000);
System.out.println(differenceDays + " days, ");
System.out.println(differenceHours + " hours, ");
System.out.println(differenceMinutes + " minutes, ");
System.out.println(differenceSeconds + " seconds.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception{
String time1 = "12:00:00";
String time2 = "12:01:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime();
System.out.println(difference/1000);
}}
ném ngoại lệ xử lý ngoại lệ phân tích
- 1. Tính chênh lệch thời gian trong Cocoa
- 2. tính chênh lệch thời gian trong R
- 3. Cách tính chênh lệch thời gian trong C++
- 4. cách tính chênh lệch thời gian trong PHP
- 5. Tính chênh lệch tháng trong Thời gian Joda
- 6. Tính toán chênh lệch thời gian tính bằng mili giây
- 7. Tính chênh lệch thời gian giữa hai lần javascript
- 8. Tính chênh lệch thời gian giữa hai hàng
- 9. Cách tính chênh lệch thời gian giữa tem thời gian unix?
- 10. Cách nhận chênh lệch thời gian trong iPhone
- 11. Cách nhận chênh lệch thời gian bằng mili giây
- 12. Cách tính chênh lệch ngày trong perl
- 13. Nhận chênh lệch thời gian giữa hai lần trong javascript
- 14. Cách thành ngữ nhất để in chênh lệch thời gian trong Java?
- 15. Nhận chênh lệch thời gian chính xác giữa hai NSDate?
- 16. Get Thời gian chênh lệch giữa nhóm các bản ghi
- 17. Lấy chênh lệch thời gian giữa hai giá trị
- 18. Tính khoảng cách (chênh lệch) OpenCV
- 19. tính chênh lệch giữa hai ngày
- 20. Cách liệt kê chênh lệch múi giờ, ID múi giờ và tên dài trong Thời gian Joda/Java 8?
- 21. Làm thế nào để tính toán chênh lệch thời gian trong vài phút giữa hai ngày trong iOS
- 22. Cách tính chênh lệch CHỈ trong tháng sử dụng Joda API của Java
- 23. Mức chênh lệch UTC theo phút
- 24. chênh lệch ngày javascript
- 25. Lỗi chênh lệch ngày Javascript?
- 26. Đo chênh lệch thời gian giữa các thiết bị được nối mạng
- 27. chênh lệch đối xứng của hai bộ trong Java
- 28. sysdate chênh lệch
- 29. zsh hoàn chênh lệch
- 30. Tính chênh lệch so với hồ sơ trước
lẽ http://joda-time.sourceforge.net/ – stacker