package com.zillabyte.motherbrain.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.joda.time.Period;
public class DateHelper {
public final static long ONE_SECOND = 1000;
public final static long SECONDS = 60;
public final static long ONE_MINUTE = ONE_SECOND * 60;
public final static long MINUTES = 60;
public final static long ONE_HOUR = ONE_MINUTE * 60;
public final static long HOURS = 24;
public final static long ONE_DAY = ONE_HOUR * 24;
public final static long ONE_WEEK = ONE_DAY * 7;
public final static long ONE_MONTH = ONE_DAY * 30;
//"2013-12-02 23:29:21"
private static final SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static long getLongMillis(String date){
try {
return dateTimeFormat.parse(date).getTime();
} catch (ParseException e) {
return 0;
}
}
public static String reverseFormattedDate() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formatted = format.format(cal.getTime());
assert (formatted != null);
return formatted;
}
public static String reverseFormattedDateWithMilliseconds() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String formatted = format.format(cal.getTime());
assert (formatted != null);
return formatted;
}
public static String reverseFormattedDate(long date) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formatted = format.format(Long.valueOf(date));
assert (formatted != null);
return formatted;
}
// 2013-07-14T23:46:29+00:00"
// yyyy-MM-dd
private final static Pattern rubyDatePattern;
static {
final Pattern maybePattern = Pattern.compile("(?:\\d{4})\\-(?:\\d{2})\\-(?:\\d{2})");
assert(maybePattern != null);
rubyDatePattern = maybePattern;
}
public static long parseRubyDate(String s) throws ParseException {
Matcher m = rubyDatePattern.matcher(s);
return rubyDateFormat.parse(m.group()).getTime();
}
// public static long maybeParseRubyDate(String s) {
// try {
// return parseRubyDate(s);
// } catch (ParseException e) {
// e.printStackTrace();
// return def;
// }
// }
public static long now() {
return System.currentTimeMillis();
}
public static long monthAgo(int i) {
return now() - (ONE_MONTH * i);
}
public static Date parseEpoch(long date) {
return new Date(date);
}
private static SimpleDateFormat rubyDateFormat = new SimpleDateFormat("yyyy-MM-dd");
public static String formatEpoch(long date) {
final String parsedDate = rubyDateFormat.format(parseEpoch(date));
assert(parsedDate != null);
return parsedDate;
}
public static String reverseFormattedDate(Date date) {
return reverseFormattedDate(date.getTime());
}
public static long roundToMidnight(long date) {
return date - (date % ONE_DAY);
}
public static long roundToWeek(long date) {
return date - (date % ONE_WEEK);
}
public static long roundToMonth(long date) {
return date - (date % ONE_MONTH);
}
public static long roundToMidnight(Date extractDate) {
return roundToMidnight(extractDate.getTime());
}
public static long roundToWeek(Date extractDate) {
return roundToWeek(extractDate.getTime());
}
public static Date midnight() {
return new Date(roundToMidnight(now()));
}
public static final DateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
static {
timestampFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
}
public static Date parseTimestamp(String string) throws ParseException {
Date d = timestampFormat.parse(string.trim());
return d;
}
public static String toTimestamp(Date d) {
return timestampFormat.format(d);
}
public static String formattedDate() {
return toTimestamp(new Date());
}
private final static Pattern _minutesPattern = Pattern.compile("(\\d+)\\s*(m|min|mins)");
private final static Pattern _secondsPattern = Pattern.compile("(\\d+)\\s*(s|sec|secs)");
private final static Pattern _millisPattern = Pattern.compile("(\\d+)\\s*(ms)");
private final static Pattern _hoursPattern = Pattern.compile("(\\d+)\\s*(h|hours)");
private static Integer _getDuration(Pattern p, String s) {
Matcher m = p.matcher(s);
if (m != null && m.find()) {
return Integer.parseInt(m.group(1));
} else {
return null;
}
}
public static Long parseDuration(String string) {
Period p = Period.ZERO;
if (_getDuration(_hoursPattern, string) != null) {
p = p.withHours(_getDuration(_hoursPattern, string));
}
if (_getDuration(_minutesPattern, string) != null) {
p = p.withMinutes(_getDuration(_minutesPattern, string));
}
if (_getDuration(_secondsPattern, string) != null) {
p = p.withSeconds(_getDuration(_secondsPattern, string));
}
if (_getDuration(_millisPattern, string) != null) {
p = p.withMillis(_getDuration(_millisPattern, string));
}
return p.toStandardDuration().getMillis();
}
}