DateTime.java 3.33 KB
Newer Older
1 2
package chat.rocket.android.helper;

3 4 5
import android.os.Build;
import android.text.format.DateFormat;

6 7 8 9
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
10
import java.util.Locale;
11
import java.util.TimeZone;
Yusuke Iwaki's avatar
Yusuke Iwaki committed
12
import chat.rocket.android.log.RCLog;
13

Yusuke Iwaki's avatar
Yusuke Iwaki committed
14 15 16
/**
 * Utility class for converting epoch ms and date-time string.
 */
17
public class DateTime {
18 19 20 21 22 23 24 25 26 27
  private static final String TAG = "DateTime";

  private static final SimpleDateFormat TIME_FORMAT;
  private static final SimpleDateFormat DATE_FORMAT;
  private static final SimpleDateFormat DAY_FORMAT;
  private static final SimpleDateFormat DAY_TIME_FORMAT;
  private static final SimpleDateFormat DATE_TIME_FORMAT;

  static {
    Locale locale = Locale.getDefault();
28

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
      TIME_FORMAT = new SimpleDateFormat(DateFormat.getBestDateTimePattern(locale, "HHmm"), locale);
      DATE_FORMAT =
          new SimpleDateFormat(DateFormat.getBestDateTimePattern(locale, "yyyyMMdd"), locale);
      DAY_FORMAT = new SimpleDateFormat(DateFormat.getBestDateTimePattern(locale, "MMdd"), locale);
      DAY_TIME_FORMAT =
          new SimpleDateFormat(DateFormat.getBestDateTimePattern(locale, "MMddHHmm"), locale);
      DATE_TIME_FORMAT =
          new SimpleDateFormat(DateFormat.getBestDateTimePattern(locale, "yyyyMMddHHmm"), locale);
    } else {
      TIME_FORMAT = new SimpleDateFormat("HH:mm", locale);
      DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd", locale);
      DAY_FORMAT = new SimpleDateFormat("MM/dd", locale);
      DAY_TIME_FORMAT = new SimpleDateFormat("MM/dd HH:mm", locale);
      DATE_TIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm", locale);
    }
  }
46 47 48 49 50 51 52 53 54 55

  /**
   * convert datetime ms to String.
   */
  public static String fromEpocMs(long epocMs, Format format) {
    Calendar cal = new GregorianCalendar();
    cal.setTimeInMillis(epocMs);

    switch (format) {
      case DAY:
Yusuke Iwaki's avatar
Yusuke Iwaki committed
56
        return DAY_FORMAT.format(cal.getTime());
57
      case DATE:
Yusuke Iwaki's avatar
Yusuke Iwaki committed
58
        return DATE_FORMAT.format(cal.getTime());
59
      case TIME:
Yusuke Iwaki's avatar
Yusuke Iwaki committed
60
        return TIME_FORMAT.format(cal.getTime());
61
      case DATE_TIME:
Yusuke Iwaki's avatar
Yusuke Iwaki committed
62
        return DATE_TIME_FORMAT.format(cal.getTime());
63
      case DAY_TIME:
Yusuke Iwaki's avatar
Yusuke Iwaki committed
64
        return DAY_TIME_FORMAT.format(cal.getTime());
65 66 67 68 69
      case AUTO_DAY_TIME: {
        final long curTimeMs = System.currentTimeMillis();
        Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("JST"));
        cal2.setTimeInMillis(curTimeMs);

Yusuke Iwaki's avatar
Yusuke Iwaki committed
70 71
        if (cal.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
            && cal.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)) {
72
          //same day.
Yusuke Iwaki's avatar
Yusuke Iwaki committed
73
          return DAY_TIME_FORMAT.format(cal.getTime());
74
        } else {
Yusuke Iwaki's avatar
Yusuke Iwaki committed
75
          return DAY_FORMAT.format(cal.getTime());
76 77 78 79 80 81 82 83 84 85 86 87 88
        }
      }
      default:
        throw new IllegalArgumentException();
    }
  }

  /**
   * parse datetime string to ms.
   */
  public static long fromDateToEpocMs(String dateString) {
    try {
      Calendar cal = new GregorianCalendar();
Yusuke Iwaki's avatar
Yusuke Iwaki committed
89
      cal.setTime(DATE_FORMAT.parse(dateString));
90 91
      return cal.getTimeInMillis();
    } catch (ParseException exception) {
Yusuke Iwaki's avatar
Yusuke Iwaki committed
92
      RCLog.w(exception, "failed to parse date: %s", dateString);
93 94 95 96
    }
    return 0;
  }

Yusuke Iwaki's avatar
Yusuke Iwaki committed
97 98 99
  /**
   * format.
   */
100 101 102 103
  public enum Format {
    DATE, DAY, TIME, DATE_TIME, DAY_TIME, AUTO_DAY_TIME
  }
}