//package eu.tanov.android.sptn.util;
import java.util.Calendar;
import java.util.Date;
import android.util.Log;
public class TimeHelper {
private static final int MILLIS_TO_MINUTES = 1000 * 60;
private static final int MILLIS_TO_HOURS = MILLIS_TO_MINUTES * 60;
private static final String SEPARATOR_ESTIMATED_TIME = ",";
private static final String TAG = "TimeHelper";
private static final int SPACE_PER_REMAINING_TIME = 10;
/**
* utility class - no instance
*/
private TimeHelper() {
}
public static String toRemainingTime(Date now, String timeData,
String formatOnlyMinutes, String formatMinutesAndHours) {
final Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
final String[] times = timeData.split(SEPARATOR_ESTIMATED_TIME);
final StringBuilder result = new StringBuilder(times.length * SPACE_PER_REMAINING_TIME);
for (String time : times) {
try {
result.append(toRemainingTime(now, time, formatOnlyMinutes, formatMinutesAndHours, calendar));
result.append(SEPARATOR_ESTIMATED_TIME);
} catch (Exception e) {
Log.e(TAG, "could not convert " + time, e);
result.append(time);
}
}
if (result.length()>0) {
//remove last comma
result.deleteCharAt(result.length() - 1);
}
return result.toString();
}
private static String toRemainingTime(Date now, String time,
String formatOnlyMinutes, String formatMinutesAndHours,
Calendar calendar) {
final String[] hoursMinutes = time.split(":");
if (hoursMinutes.length != 2) {
throw new IllegalArgumentException(
"could not split hours-minutes: " + time);
}
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hoursMinutes[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(hoursMinutes[1]));
final long arrivingTime = calendar.getTimeInMillis();
final long remainingTimeInMillis = arrivingTime - now.getTime();
if (remainingTimeInMillis < 0) {
throw new IllegalArgumentException(String.format(
"negative remaining time: time = %s, now = %s, diff = %s",
time, now, remainingTimeInMillis));
}
return remainingTimeToHumanReadableForm(remainingTimeInMillis, formatOnlyMinutes, formatMinutesAndHours);
}
/**
* @param remaining
* @return something like ~1?.22?.
*/
private static String remainingTimeToHumanReadableForm(long remaining,
String formatOnlyMinutes, String formatMinutesAndHours) {
int minutes = (int) ((remaining % MILLIS_TO_HOURS) / MILLIS_TO_MINUTES);
int hours = (int) (remaining / MILLIS_TO_HOURS);
if (hours > 0) {
return String.format(formatMinutesAndHours, hours, minutes);
} else {
return String.format(formatOnlyMinutes, minutes);
}
}
public static String removeTrailingSeparator(String timeData) {
if (!timeData.endsWith(SEPARATOR_ESTIMATED_TIME)) {
return timeData;
}
// sometimes estimated time has one more comma: 21:00,21:20,
return timeData.substring(0, timeData.length() - 1);
}
}