2014-06-18 5 views
6

È possibile analizzare una data ed estrarre la settimana del mese utilizzando Joda-Time. So che è possibile farlo per la settimana dell'anno ma non riesco a trovare come/se è possibile estrarre la settimana del mese.Ottieni la settimana del mese con Joda-Time

Esempio: 2014-06_03 dove 03 è la terza settimana di questo mese

DateTime dt = new DateTime(); 
String yearMonthWeekOfMonth = dt.toString("<PATTERN for the week of month>"); 

Ho provato il modello "yyyyMMW", ma non è accettato.

risposta

4

La versione corrente di joda-time non supporta la settimana del mese, quindi è necessario utilizzare qualche soluzione.
1) Ad esempio, è possibile utilizzare il metodo seguente:

static DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM_'%d'"); 
    static String printDate(DateTime date) 
    { 
     final String baseFormat = FORMATTER.print(date); // 2014-06_%d 
     final int weekOfMonth = date.getDayOfMonth() % 7; 
     return String.format(baseFormat, weekOfMonth); 
    } 

Usage:

DateTime dt = new DateTime(); 
String dateAsString = printDate(dt); 

2) È possibile utilizzare Java 8, perché le API di Java supporta settimana di campo mese.

java.time.LocalDateTime date = LocalDateTime.now(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM_W"); 
    System.out.println(formatter.format(date)); 
+0

Grazie per la risposta, infine, con SimpleDateFormat ha fatto il trucco per me, ma è bene sapere che è supportato da Java 8 – tbo

+2

Correzione per la prima soluzione: 'final int weekOfMonth = (date.getDayOfMonth()/7) + 1;' – snaikar

5

Questa opzione in Joda è probabilmente più bello:

Weeks.weeksBetween(date, date.withDayOfMonth(1)).getWeeks() + 1 
+0

Basta fare attenzione che se 'date> then date.withDayOfMonth (1)' codice sopra restituisce valori negativi, almeno per ' joda-time 2.9.1', non sa che si tratta di bug o comportamento previsto, ma secondo API dovrebbe essere '.. (inizio, fine)', 'settimane Settimane statiche pubbliche tra (ReadablePartial start, Re adablePartial end) ', http://joda-time.sourceforge.net/apidocs/org/joda/time/Weeks.html#weeksBetween(org.joda.time.ReadableInstant, org.joda.time.ReadableInstant) – Anatoly

+0

puoi fai sempre Weeks.weeksBefore (date1.isBefore (date2)? date1: date2, date1.isBefore (date2)? date2: date1)). getWeeks() + 1 – FrankMonza