package com.gaiagps.iburn;
import android.content.Context;
import android.text.format.DateUtils;
import com.gaiagps.iburn.api.typeadapter.PlayaDateTypeAdapter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Created by davidbrodsky on 8/6/14.
*/
public class DateUtil {
private static SimpleDateFormat timeFormatter = new SimpleDateFormat("h:mm a", Locale.US);
/**
* Get a human description of an event's state
* (e.g: Starts in XX, Ends in XX)
*
* @param context The application {@link android.content.Context}
* @param nowDate The date to treat as 'now'
* @param relativeTimeCutoff The date before which to use relative date descriptors. e.g: (in 2 minutes)
* @param startDateStr An ISO start date string
* @param prettyStartDateStr A 'prettified' start date string
* @param endDateStr An ISO end date string
* @param prettyEndDateStr A 'prettified' end date string
*/
public static String getDateString(Context context, Date nowDate, Date relativeTimeCutoff, String startDateStr, String prettyStartDateStr, String endDateStr, String prettyEndDateStr) {
try {
Date startDate = PlayaDateTypeAdapter.iso8601Format.parse(startDateStr);
if (nowDate.before(startDate)) {
// Has not yet started
if (relativeTimeCutoff.after(startDate)) {
return context.getString(R.string.starts) + " " + DateUtils.getRelativeTimeSpanString(startDate.getTime(), nowDate.getTime(), DateUtils.MINUTE_IN_MILLIS).toString();
}
return context.getString(R.string.starts) + " " + prettyStartDateStr;
} else {
// Already started
Date endDate = PlayaDateTypeAdapter.iso8601Format.parse(endDateStr);
if (endDate.before(nowDate)) {
if (relativeTimeCutoff.after(endDate)) {
return context.getString(R.string.ended) + " " + DateUtils.getRelativeTimeSpanString(endDate.getTime(), nowDate.getTime(), DateUtils.MINUTE_IN_MILLIS).toString();
}
return context.getString(R.string.ended) + " " + prettyEndDateStr;
} else {
if (relativeTimeCutoff.after(endDate)) {
return context.getString(R.string.ends) + " " + DateUtils.getRelativeTimeSpanString(endDate.getTime(), nowDate.getTime(), DateUtils.MINUTE_IN_MILLIS).toString();
}
return context.getString(R.string.ends) + " " + prettyEndDateStr;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return prettyStartDateStr;
}
public static String getStartDateString(Date startDate, Date nowDate) {
if (Math.abs(startDate.getTime() - nowDate.getTime()) < DateUtils.MINUTE_IN_MILLIS) {
return "Starting now";
} else {
long deltaTime = startDate.getTime() - nowDate.getTime();
int hours = (int) (deltaTime / DateUtils.HOUR_IN_MILLIS);
int minutes = (int) ((deltaTime - (hours * DateUtils.HOUR_IN_MILLIS)) / DateUtils.MINUTE_IN_MILLIS);
String relativeSpan = null;
if (hours > 0)
relativeSpan = "at " + timeFormatter.format(startDate);
else
relativeSpan = String.format("in %d minute%s", minutes, minutes > 1 ? 's' : "");
return (startDate.before(nowDate) ? "Started " : "Starts ") + relativeSpan;
}
}
public static String getEndDateString(Date endDate, Date nowDate) {
if (Math.abs(endDate.getTime() - nowDate.getTime()) < DateUtils.MINUTE_IN_MILLIS) {
return "Ending now";
} else {
String relativeSpan = DateUtils.getRelativeTimeSpanString(
endDate.getTime(),
nowDate.getTime(),
DateUtils.MINUTE_IN_MILLIS).toString();
return (endDate.before(nowDate) ? "Ended " : "Ends ") + relativeSpan;
}
}
}