Каков наилучший способ вычесть 5 минут из данной даты эпохи?
public long fiveMinutesAgo(String epochDate) {
//ToDo
return fiveMinBack;
}
Каков наилучший способ вычесть 5 минут из данной даты эпохи?
public long fiveMinutesAgo(String epochDate) {
//ToDo
return fiveMinBack;
}
epochDate должна быть датой. Используйте календарь:
Calendar calendar = Calendar.getInstance();
calendar.setTime(epochDate);
calendar.add(Calendar.MINUTE, -5);
Date result = calendar.getTime();
Вы можете вычесть 5-минутный эквивалент миллисекунд из полученной даты: -
//convert input string epochDate to Date object based on the format
long ms=date.getTime();
Date updatedDate=new Date(ms - (5 * 60000)); //60000 is 1 minute equivalent in milliseconds
return updatedDate.getTime();
Вот тело для вашего метода:
private static final long FIVE_MINS_IN_MILLIS = 5 * 60 * 1000;
public long fiveMinutesAgo(String epochDate) throws ParseException {
DateFormat df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
long time = df.parse(epochDate).getTime();
return time - FIVE_MINS_IN_MILLIS;
}
Время указано в миллисекундах с начала эпохи, поэтому, чтобы узнать за пять минут до этого, вам просто нужно вычесть 5 минут из миллисекунд (5 * 60 * 1000).
Я бы предложил переименовать метод в: fiveMinutesBefore()
и, возможно, разбить его на два метода: один для разбора строковых дат во время, а другой для вычитания минут из времени.
Вы также можете рассмотреть возможность использования Joda-Time, так как он намного лучше разработан (и безопаснее для потоков), чем стандартный пакет даты Java.
Вы можете использовать любой из вышеперечисленных методов другим пользователем, но если интересно, попробуйте
API даты и времени Java 8
public void subtract_minutes_from_date_in_java8 ()
{
LocalDateTime newYearsDay = LocalDateTime.of(2015, Month.JANUARY, 1, 0, 0);
LocalDateTime newYearsEve = newYearsDay.minusMinutes(1);// In your case use 5 here
java.time.format.DateTimeFormatter formatter =java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss S");
logger.info(newYearsDay.format(formatter));
logger.info(newYearsEve.format(formatter));
}
Вывод:
01/01/2015 00:00:00 CST
12/31/2014 23:59:00 CST
Класс LocalDateTime — это неизменяемый объект даты и времени, присутствующий в пакете java.time в Java 8 и представляющий дату и время, часто рассматриваемый как год. -месяц-день-час-минута-секунда.
Ниже приведен синтаксис используемого метода of()
:
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute)
который получает экземпляр LocalDateTime из года, месяца, дня, часа и минуты, устанавливая секунды и наносекунды равными нулю.
String
- какой формат? Вы должны разделить задачи на синтаксический анализ, затем на арифметику. Что из этого доставляет вам проблемы? - person Jon Skeet   schedule 28.01.2015