package com.camilstaps.common; import android.content.Context; import android.util.Log; import com.camilstaps.taize.R; import java.text.ParseException; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by camilstaps on 7-4-15. */ public class Date implements Comparable { private int year, month, day; public Date() { Calendar cal = Calendar.getInstance(); year = cal.get(Calendar.YEAR); month = cal.get(Calendar.MONTH) + 1; day = cal.get(Calendar.DAY_OF_MONTH); } public Date(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } public Date(String format) throws ParseException { Pattern pat = Pattern.compile("(\\d*)-(\\d*)-(\\d*)"); Matcher match = pat.matcher(format); if (match.find()) { year = Integer.parseInt(match.group(1)); month = Integer.parseInt(match.group(2)); day = Integer.parseInt(match.group(3)); } else { throw new ParseException("Wrong date format", 0); } } public Date(Date copy) { year = copy.year; month = copy.month; day = copy.day; } public int getYear() { return year; } public int getMonth() { return month; } public int getDay() { return day; } public void addYears(int n) { year += n; } public void addMonths(int n) { for (int i = 0; i < n; i++) { month++; if (month >= 13) { month = 1; addYears(1); } } } public void addDays(int n) { for (int i = 0; i < n; i++) { day++; if (day >= daysOfMonth()) { day = 1; addMonths(1); } } } public boolean equals(Date date) { return year == date.year && month == date.month && day == date.day; } @Override public String toString() { return Integer.toString(year) + "-" + Integer.toString(month) + "-" + Integer.toString(day); } public static boolean isLeapYear(int year) { if (year % 4 != 0) return false; if (year % 100 != 0) return true; if (year % 400 != 0) return false; return true; } public boolean isLeapYear() { return isLeapYear(year); } public static int daysOfYear(int year) { return isLeapYear(year) ? 366 : 365; } public int daysOfYear() { return daysOfYear(year); } public static int daysOfMonth(int year, int month) { switch (month) { case 2: return isLeapYear(year) ? 29 : 28; case 1: case 3: case 5: case 8: case 10: case 12: return 31; default: return 30; } } public int daysOfMonth() { return daysOfMonth(year, month); } public int diffDays(Date withDate) { Date smaller, bigger; if (compareTo(withDate) > 0) { smaller = new Date(this); bigger = new Date(withDate); } else { smaller = new Date(withDate); bigger = new Date(this); } if (smaller.equals(bigger)) { return 0; } int i = 0; while (!smaller.equals(bigger)) { smaller.addDays(1); i++; } return i; } @Override public int compareTo(Date another) { if (another.year != year) return Integer.compare(another.year, year); if (another.month != month) return Integer.compare(another.month, month); if (another.day != day) return Integer.compare(another.day, day); return 0; } public String toNiceString(Context context) { return android.text.format.DateFormat.getDateFormat(context).format(new GregorianCalendar(year, month - 1, day).getTime()); } }