2013-05-13 2 views
0

Привет всем надеюсь, что все в порядке, У меня проблема, с которой я полностью застрял, если у вас есть идеи, которые могут вам помочь?получить последний четверг todate в android

В моем приложении я могу получить текущую дату и время, как показано ниже. Но мне нужна дата последнего четверга, но не знаете, как это сделать?

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy-HH:mm"); 
Calendar cal = Calendar.getInstance(); 
String start = "Last Thursday was: "; 
String date = (dateFormat.format(cal.getTime())); 
String all = (start + date); 

Заранее благодарим за любые советы. Т.

ответ

3

не андроид конкретных, но в целом, если

  • R сегодняшняя дата
  • Rd является сегодня (R) номер дня недели
  • X день номер недели (5 для четверг - или это 4)
  • L это максимальный номер дня (7 или 6 в зависимости от индексации)

Затем в прошлом четверг (не я? зажимные сегодня если сегодня четверг) является:

R - (Rd - X + L)days 

Я не говорю на этом языке, но на основании других ответов, как это кажется кодом. Короткие и сладкие. отредактируйте, если не правильно.

Calendar cal = Calendar.getInstance(); //today 
cal.add (Calendar.DATE, 
      -(cal.get(Calendar.DAY_OF_WEEK) - Calendar.THURSDAY + Calendar.SATURDAY) 
     ); 
+0

не требуется никаких циклов! – gillyspy

+1

Я подумал об этом некоторое время, и я думаю, что «R-Rd + X-L days» будет легче понять. Кроме того, вместо 5 вы можете использовать константу 'Calendar.THURSDAY'. – brillenheini

+0

@brillenheini хорошая идея. – gillyspy

0

Попробуйте что-то вроде этого:

long startTime = cal.getTimeInMillis(); 
cal.set (Calendar.DAY_OF_WEEK, Calendar.THURSDAY); // may move forwards or backwards 
if (cal.getTimeInMillis() > startTime) // we went forwards, so 
    cal.add (Calendar.DATE, -7);   // go back one week. 
0
Calendar cal = Calendar.getInstance(); 

while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.THURSDAY) 
     { 
     cal.add(Calendar.DAY_OF_YEAR, -1); 
     } 

Date lastThursday = cal.getTime(); 

Date объект lastThursday будет представлять текущее время суток, но самый последний четверг в прошлом. Затем вы можете отформатировать Date, как вы это делаете выше, с текущим временем.

Если вам не нужны часы и минуты в вашем String затем изменить SimpleDateFormatter быть:

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 

Раствор выше, включает возможность сегодня является последним четверг. Если вы не хотите, чтобы включить сегодня, то сделать это do-while петлю вместо:

do 
     { 
     cal.add(Calendar.DAY_OF_YEAR, -1); 
     } 
    while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.THURSDAY); 
0

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

public static String getLastThursday(){ 
    Calendar cal = Calendar.getInstance(); 
    cal.add (Calendar.DATE, -(cal.get(Calendar.DAY_OF_WEEK) -5 + 7)); 

    DateFormat df = new SimpleDateFormat("dd-MM-yyyy"); 

    String lastThursday = df.format(cal.getTime()); 
    return lastThursday; 
} 

Какой будет форматировать строку с датой последние четверги. Вы можете изменить df, чтобы форматировать строку даты, как вам нравится see here

Кредиты @gillyspy для очень элегантной одной строки даты корректируются!

Смежные вопросы