2016-09-08 1 views
2

J'ai essayé d'obtenir le dernier horodatage dans le mois en cours de l'année sur Android si j'ai trouvéObtenez dernier horodatage du mois en cours dans Android

getActualMaximum d'instance « calendrier » utile, mais quand je l'ai essayé de comprendre ce qui est le dernier horodatage Août à 2016 j'ai eu tort nombre de jours 30 au lieu de 31

public static long getLastTimeStampOfCurrentMonth(int month, int year) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(year,month, cal.getActualMaximum(Calendar.DAY_OF_MONTH), 23,59,59); 
    return cal.getTimeInMillis(); 
} 

J'ai trouvé une solution pour ce cas quand je pris le minimum du mois suivant moins un:

public static long getLastTimeStampOfCurrentMonth(int month, int year) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(year,month, cal.getActualMinimum(Calendar.DAY_OF_MONTH)-1, 23,59,59); 
    return cal.getTimeInMillis(); 
} 

Je suis curieux de savoir ce qui a causé le problème ... (mai j'ai trouvé un bug)

Répondre

2
import java.util.Calendar; 


public class test_cal { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println(getLastTimeStampOfCurrentMonth(Calendar.AUGUST,2016)); 
    } 
    public static long getLastTimeStampOfCurrentMonth(int month, int year) { 
     Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.YEAR, year);//leap year 29 Feb;) 
     cal.set(Calendar.MONTH, month); 
     cal.set(year,month, cal.getActualMaximum(Calendar.DAY_OF_MONTH), cal.getActualMaximum(Calendar.HOUR_OF_DAY),cal.getActualMaximum(Calendar.MINUTE),cal.getActualMaximum(Calendar.SECOND)); 
     cal.set(Calendar.MILLISECOND,cal.getActualMaximum(Calendar.MILLISECOND)); 
     return cal.getTimeInMillis(); 
    } 
} 
+0

Gotcha, précédemment j'ai eu les jours du mois du mois en cours (septembre dans ce cas) je devais mettre le mois pertinent sur l'instance de calander: "cal.set (Calendar.MONTH, month);" avant "cal.getActualMaximum (Calendar.DAY_OF_MONTH);" –

+0

@LiorZamir, mise à jour. année bissextile incluse. – Vyacheslav

0

Utilisez cette méthode pour l'horodatage get du dernier jour du mois courant ...

private long getLastTimeStampOfCurrentMonth() { 
    Calendar calendar = Calendar.getInstance(); 
    // passing month-1 because 0-->jan, 1-->feb... 11-->dec 
    calendar.set(Calendar.getInstance().get((Calendar.YEAR)), Calendar.getInstance().get(Calendar.DAY_OF_MONTH), 1); 
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE)); 
    Date date = calendar.getTime(); 
    return date.getTime(); 
    }