Я хочу вычесть два временных интервала, например, 16:00:00 с 19:00:00. Есть ли какая-либо функция java для этого? Результаты могут быть в миллисекундах, секундах или минутах.Как рассчитать разницу во времени в java?
ответ
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();
Разница в миллисекундах.
I модифицировано sfaizs post.
насчет другого пути? 16:00 - 19:00? Как я могу рассчитать это? –
@AlexKapustian вы инвертируете переменные ... – Av4t4r
Инвертирование переменных не принесет много пользы. В этом примере, конечно, вы можете инвертировать их и принять абсолютное значение или что-то еще. Но что произойдет, если у вас полночь (00:00)? – rj2700
Как и на любом другом языке; конвертируйте ваши периоды времени в временную метку unix (т. е. секунды с эпохи Unix), а затем просто вычтите. Затем полученные секунды должны использоваться как новая временная метка unix и считаться отформатированными в любом формате.
Ах, дайте выше плакат (genesiss) его должное, код всегда удобно;) Хотя, теперь у вас есть объяснение, а :)
Болевой способ преобразовать Millis и сделать вычитание а затем обратно в любые секунды или так вы хотите. Лучший способ - использовать JodaTime.
Или ... uhm ... unix timestamp?AFAIK Java имеет хорошие классы времени. – Christian
Я никогда не упоминал временные метки unix. Также хорошо известно, что Java Date and Time API отстой для более чем случайного использования. JodaTime намного лучше и, вероятно, путь, пока JSR 310 не станет частью Java. http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen –
@Manfred Moser: возможно, у вас должно быть ... Оба класса Java по умолчанию и Joda дают время в миллисе, начиная с чего называется эпохой ** Unix **. В этот момент они становятся чертовыми рядом с ** временными отметками Unix ** (один находится в миллисе, другой - в секундах). В любом случае то, что хочет OP, можно сделать тривиально, используя классы Java по умолчанию, принимая число миллисов с момента ** ** Unix ** и вычитая их. – SyntaxT3rr0r
получить довольно временные разницы, то
// 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.");
Удивительная техника – hadi
действительно отличный ответ – 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();
Это также доступно для Java SE 6 и 7 как [back port] (https://github.com/ThreeTen/threetenbp), а также для [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.
и, чтобы показать в более удобном формате, вы можете использовать:
DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###");
System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000));
Это дублирует другой ответ и не добавляет нового контента. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового для участия. – DavidPostill
@DavidPostill, спасибо за ваши головы. Но решение, в котором я нуждался, и не нашел в сообщении GENESIS, было разницу во времени между выполнением двух строк кода (например, начальная и конечная точки программы или до и после запуска метода, а не какое-то статическое время). Я думал, что это может помочь. – Alisa
Java 8 имеет cleaner solution - Instant and Duratio п
Пример:
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");
Аlternative вариант, если время от разных дней берется, например: 22:00 и 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();
}
}
Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно * why * и/или * как * этот код отвечает на вопрос, улучшает его долгосрочную ценность. –
класс TimeCalculator { Строка 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;
Теперь минут будет правильно длительность между двумя раз (в минуту).
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);
}}
бросает исключение обрабатывает разборе исключения
- 1. Как рассчитать разницу во времени
- 2. Как рассчитать разницу во времени?
- 3. Как рассчитать разницу во времени
- 4. Как рассчитать разницу во времени и времени?
- 5. Рассчитать разницу во времени | строки
- 6. чтобы рассчитать разницу во времени
- 7. Как рассчитать разницу во времени в VBA?
- 8. Как рассчитать разницу во времени в AngularJS?
- 9. Как рассчитать разницу во времени в PHP
- 10. Как рассчитать разницу во времени в R?
- 11. Как рассчитать разницу во времени в MySQL?
- 12. Как рассчитать разницу во времени в C++
- 13. Hive: Как рассчитать разницу во времени
- 14. Как рассчитать разницу во времени с NSDateFormatter
- 15. php рассчитать разницу во времени в процентах
- 16. Рассчитать разницу во времени в андроида
- 17. Рассчитать разницу во времени в минутах
- 18. Как рассчитать разницу во времени в PHP и сохранить разницу во времени в базе данных mysql
- 19. PHP Рассчитать разницу во времени 24 часов
- 20. Рассчитать разницу во времени с помощью TimeSpan
- 21. Рассчитать разницу во времени и использовать дни
- 22. Рассчитать разницу во времени между двумя EditText
- 23. Рассчитать разницу во времени с помощью javascript
- 24. Рассчитать разницу во времени с помощью awk
- 25. Рассчитать разницу во времени для посещения
- 26. Рассчитать разницу во времени с перекрывающимся временем
- 27. jquery datepicker - рассчитать разницу во времени
- 28. Как рассчитать разницу во времени между отметками времени unix?
- 29. вычислить разницу во времени
- 30. Рассчитать разницу во времени по времени в Excel
вероятно http://joda-time.sourceforge.net/ – stacker