Android получает дату до 7 дней (одна неделя)

Как получить дату до одной недели с этого момента в андроиде в этом формате:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

Ex: now 2010-09-19 HH:mm:ss , до одной недели 2010-09-12 HH:mm:ss

благодаря

Solutions Collecting From Web of "Android получает дату до 7 дней (одна неделя)"

Разберите дату:

 Date myDate = dateFormat.parse(dateString); 

И затем либо выяснить, сколько миллисекунд вам нужно вычесть:

 Date newDate = new Date(myDate.getTime() - 604800000L); // 7 * 24 * 60 * 60 * 1000 

Или используйте API, предоставляемый классом java.util.Calendar :

 Calendar calendar = Calendar.getInstance(); calendar.setTime(myDate); calendar.add(Calendar.DAY_OF_YEAR, -7); Date newDate = calendar.getTime(); 

Затем, если вам нужно, переведите его обратно в строку:

 String date = dateFormat.format(newDate); 

Я создал свою собственную функцию, которая может помочь получить следующую / предыдущую дату из

Текущая дата:

 /** * Pass your date format and no of days for minus from current * If you want to get previous date then pass days with minus sign * else you can pass as it is for next date * @param dateFormat * @param days * @return Calculated Date */ public static String getCalculatedDate(String dateFormat, int days) { Calendar cal = Calendar.getInstance(); SimpleDateFormat s = new SimpleDateFormat(dateFormat); cal.add(Calendar.DAY_OF_YEAR, days); return s.format(new Date(cal.getTimeInMillis())); } 

Пример:

 getCalculatedDate("dd-MM-yyyy", -10); // It will gives you date before 10 days from current date getCalculatedDate("dd-MM-yyyy", 10); // It will gives you date after 10 days from current date 

И если вы хотите получить расчетную дату с пропуском собственной даты:

 public static String getCalculatedDate(String date, String dateFormat, int days) { Calendar cal = Calendar.getInstance(); SimpleDateFormat s = new SimpleDateFormat(dateFormat); cal.add(Calendar.DAY_OF_YEAR, days); try { return s.format(new Date(s.parse(date).getTime())); } catch (ParseException e) { // TODO Auto-generated catch block Log.e("TAG", "Error in Parsing Date : " + e.getMessage()); } return null; } 

Пример с пропуском собственной даты:

 getCalculatedDate("01-01-2015", "dd-MM-yyyy", -10); // It will gives you date before 10 days from given date getCalculatedDate("01-01-2015", "dd-MM-yyyy", 10); // It will gives you date after 10 days from given date 

Joda времени

Использование библиотеки Joda-Time облегчает работу с датой.

Обратите внимание на использование часового пояса. Если вы не указали, вы работаете в UTC или в текущем часовом поясе JVM.

 DateTime now = DateTime.now ( DateTimeZone.forID( "America/Montreal" ) ) ; DateTime weekAgo = now.minusWeeks( 1 ); DateTime weekAgoStart = weekAgo.withTimeAtStartOfDay(); 

Я вижу два пути:

  1. Используйте GregorianCalendar :

     Calendar someDate = GregorianCalendar.getInstance(); someDate.add(Calendar.DAY_OF_YEAR, -7); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = dateFormat.format(someDate); 
  2. Используйте android.text.format.Time :

     long yourDateMillis = System.currentTimeMillis() - (7 * 24 * 60 * 60 * 1000); Time yourDate = new Time(); yourDate.set(yourDateMillis); String formattedDate = yourDate.format("%Y-%m-%d %H:%M:%S"); 

Решение 1 является «официальным» способом java, но использование GregorianCalendar может иметь серьезные проблемы с производительностью, поэтому инженеры Android добавили объект android.text.format.Time, чтобы исправить это.