Как определить, прошло ли 48 часов с определенного времени? - PullRequest
5 голосов
/ 19 января 2012

Я хочу проверить и посмотреть, прошло ли 48 часов с определенного времени? Я использую этот формат даты и времени (гггг / мм / дд чч: мм: сс). Есть ли какая-либо функция Java для этого?

Ответы [ 8 ]

7 голосов
/ 19 января 2012

Конечно. Я настоятельно советую вам забрать Joda DateTime .Как сказал @Basil Bourque в комментарии, Joda теперь находится в режиме обслуживания, и начиная с Java 8 вы должны использовать методы java.time.

Текущий предлагаемый код, который не зависит от библиотеки и более четко показывает, что он делает:

// How to use Java 8's time utils to calculate hours between two dates
LocalDateTime dateTimeA = LocalDateTime.of(2017, 9, 28, 12, 50, 55, 999);
LocalDateTime dateTimeB = LocalDateTime.of(2017, 9, 30, 12, 50, 59, 851);
long hours = ChronoUnit.HOURS.between(dateTimeA, dateTimeB);
System.out.println(hours);

Оригинальный предлагаемый код (также не зависит от библиотеки):

// pseudo-code
DateTime a = new DateTime("old time");
DateTime b = new DateTime(" now    ");

// get hours
double hours = (a.getMillis() - b.getMillis()) / 1000 / 60 / 60;
if(hours>48) ...
6 голосов
/ 28 августа 2012

Мне удалось это сделать с помощью библиотеки JodaTime в моем проекте. Я вышел с этим кодом.

String datetime1 = "2012/08/24 05:22:34";
String datetime2 = "2012/08/24 05:23:28";

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss");
DateTime time1 = format.parseDateTime(datetime1);
DateTime time2 = format.parseDateTime(datetime2);
Minutes Interval = Minutes.minutesBetween(time1, time2);
Minutes minInterval = Minutes.minutes(20);

if(Interval.isGreaterThan(minInterval)){
  return true;
}
else{
  return false;
}

Это проверит, если интервал времени между datetime1 и datetime2 больше GreaterThan 20 минут. Измените свойство на Дни. Теперь тебе будет легче. Это вернет false.

4 голосов
/ 19 января 2012

Вы можете добавить 48 часов к определенной дате, а затем, если результат будет раньше, чем ваша начальная дата, вы знаете, что вы прошли 48 часов.

Date dateInQuestion = getDateInQuestion();

Calendar cal = Calendar.getInstance();
cal.setTime(dateInQuestion);
cal.add(Calendar.HOUR, 48);
Date futureDate = cal.getTime();

if (dateInQuestion.after(futureDate)) {
  // Then more than 48 hours have passed since the date in question
}
3 голосов
/ 19 января 2012
Date twoDaysAgo = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 2);
Date parsedDate = new SimpleDateFormat("y/M/d h:m:s").parse(myDateString);
boolean hasTimePasssed = parsedDate.before(twoDaysAgo);
1 голос
/ 19 января 2012

Если вам не нужно обрабатывать особые случаи, вы можете использовать функцию .before () и создать объект даты для представления 48 часов назад:

long millisIn48Hours = 1000 * 60 * 60 * 48;
Date timestamp = new Date(0);//use the date you have, parse it using SimpleDateFormat if needed.
Date hours48ago = new Date(new Date().getTime() - millisIn48Hours);

if (timestamp.before(hours48ago)) {
    //48 hours has passed.
}

РЕДАКТИРОВАТЬ: Я бы не сталдобавьте библиотечную зависимость для чего-то такого простого, но если вы собираетесь использовать JodaTime, я бы использовал их удобные методы, а не вычислял смещение по времени, как в другом ответе:

DateTime original = new DateTime("your original date object");
DateTime now = new DateTime();
DateTime minus48 = now.minusHours(48);

if (original.isBefore(minus48)) {
    //48 hours has elapsed. 
} 
0 голосов
/ 28 сентября 2017

Проект Joda-Time сейчас находится в режиме обслуживания.Команда советует перейти на классы java.time.

java.time

В современном подходе используются классы java.time.

Разбор строкового ввода в формате yyyy/MM/dd hh:mm:ss.Это почти в стандартном формате ISO 8601.Отрегулируйте для соответствия.

String input = "2017/01/23 12:34:56".replace( "/" , "-" ).replace( " " , "T" ).concat( "Z" ) ;

Если это вообще возможно, используйте стандартные форматы, а не придумывайте свои собственные при обмене значениями времени и даты в виде текста.Классы java.time по умолчанию используют стандартные форматы при разборе и генерации строк.

Анализ в качестве значения в UTC.

Instant instant = Instant.parse( input ) ;

Получить текущий момент.

Instant now = Instant.now() ;

Сравните с промежутком времени в 48 часов.

Duration d = Duration.ofHours( 48 ) ;
if ( instant.plus( d ).isBefore( now ) ) { … }
0 голосов
/ 28 сентября 2017

В дополнение к Joda DateTime

Если вы хотите проверить, если, скажем, одна дата находится между другими временными рамками, скажем, это date1 4 часа между date2, у joda естьразные классы только для этих сценариев вы можете использовать:

Hours h = Hours.hoursBetween(date1, date2);
Days s = Days.daysBetween(date1, date2);
Months m = Months.monthsBetween(date1,date2);

http://joda -time.sourceforge.net / apidocs / org / joda / time / base / BaseSingleFieldPeriod.html

0 голосов
/ 23 сентября 2016

Вы можете использовать следующее:

 DateTime specificDate = new DateTime(" some specific date");
 DateTime now = new DateTime();

 if(TimeUnit.MILLISECONDS.toHours(now.getMillis() - specificDate.getMillis()) > 48) {
    //Do something
  }

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...