blob: 8e5d6f436c1d45da6c1b57f6ca96da76f983bbb3 (
plain) (
tree)
|
|
package com.camilstaps.common;
import android.content.Context;
import android.util.Log;
import com.camilstaps.taize.R;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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<Date> {
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 subtractYears(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 subtractMonths(int n) {
for (int i = 0; i < n; i++) {
month--;
if (month <= 0) {
month = 12;
subtractYears(1);
}
}
}
public void addDays(int n) {
for (int i = 0; i < n; i++) {
day++;
if (day >= daysOfMonth()) {
day = 1;
addMonths(1);
}
}
}
public void subtractDays(int n) {
for (int i = 0; i < n; i++) {
day--;
if (day <= 0) {
month--;
day = daysOfMonth();
}
}
}
public void addOrSubtractDays(int n) {
if (n < 0) {
subtractDays(-n);
} else {
addDays(n);
}
}
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) {
SimpleDateFormat sdf = new SimpleDateFormat("EEEE d MMMM y");
return sdf.format(new GregorianCalendar(year, month - 1, day).getTime());
//return android.text.format.DateFormat.getDateFormat(context).format(new GregorianCalendar(year, month - 1, day).getTime());
}
}
|