Вычитание 5 минут из даты эпохи

Каков наилучший способ вычесть 5 минут из данной даты эпохи?

public long fiveMinutesAgo(String epochDate) {
//ToDo
return fiveMinBack;
}

person Sachin    schedule 28.01.2015    source источник
comment
Ваш ввод String - какой формат? Вы должны разделить задачи на синтаксический анализ, затем на арифметику. Что из этого доставляет вам проблемы?   -  person Jon Skeet    schedule 28.01.2015


Ответы (4)


epochDate должна быть датой. Используйте календарь:

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(epochDate);
    calendar.add(Calendar.MINUTE, -5);
    Date result = calendar.getTime();
person attofi    schedule 28.01.2015

Вы можете вычесть 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();
person Mustafa sabir    schedule 28.01.2015

Вот тело для вашего метода:

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.

person ᴇʟᴇvᴀтᴇ    schedule 28.01.2015

Вы можете использовать любой из вышеперечисленных методов другим пользователем, но если интересно, попробуйте

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 из года, месяца, дня, часа и минуты, устанавливая секунды и наносекунды равными нулю.

person Neeraj Jain    schedule 28.01.2015