Created
March 4, 2015 03:35
-
-
Save fazlurr/047ff06f0c9e13324591 to your computer and use it in GitHub Desktop.
Time Utility Class i'm using for one of my Android Project
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import android.content.Context; | |
| import android.text.TextUtils; | |
| import android.text.format.DateUtils; | |
| import java.text.DateFormat; | |
| import java.text.ParseException; | |
| import java.text.SimpleDateFormat; | |
| import java.util.*; | |
| /** | |
| * Modified from Google I/O Schedule App - https://github.com/google/iosched | |
| * Original Code : https://github.com/google/iosched/blob/0a90bf8e6b90e9226f8c15b34eb7b1e4bf6d632e/android/src/main/java/com/google/samples/apps/iosched/util/TimeUtils.java | |
| */ | |
| public class TimeUtils { | |
| private static final int SECOND = 1000; | |
| private static final int MINUTE = 60 * SECOND; | |
| private static final int HOUR = 60 * MINUTE; | |
| private static final int DAY = 24 * HOUR; | |
| public static String getCurrentUTCTimestamp() { | |
| SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a Z", Locale.US); | |
| dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC")); | |
| return dateFormatGmt.format(new Date()); | |
| } | |
| public static String getUTCTimestamp(Date date) { | |
| SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a Z", Locale.US); | |
| dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC")); | |
| return dateFormatGmt.format(date); | |
| } | |
| public static String getTimeAgo(final Context context, long time) { | |
| // TODO: use DateUtils methods instead | |
| if (time < 1000000000000L) { | |
| // if timestamp given in seconds, convert to millis | |
| time *= 1000; | |
| } | |
| long now = System.currentTimeMillis(); | |
| if (time > now || time <= 0) { | |
| return null; | |
| } | |
| final long diff = now - time; | |
| // TODO: localize the time information | |
| if (diff < MINUTE) { | |
| return "just now"; | |
| } else if (diff < 2 * MINUTE) { | |
| return "a minute ago"; | |
| } else if (diff < 50 * MINUTE) { | |
| return diff / MINUTE + " minutes ago"; | |
| } else if (diff < 90 * MINUTE) { | |
| return "an hour ago"; | |
| } else if (diff < 24 * HOUR) { | |
| return diff / HOUR + " hours ago"; | |
| } else if (diff < 48 * HOUR) { | |
| return "yesterday"; | |
| } else { | |
| return diff / DAY + " days ago"; | |
| } | |
| } | |
| private static final SimpleDateFormat[] ACCEPTED_TIMESTAMP_FORMATS = { | |
| new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US), | |
| new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a Z", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US), | |
| new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.US) | |
| }; | |
| private static final SimpleDateFormat VALID_IFMODIFIEDSINCE_FORMAT = | |
| new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US); | |
| public static Date parseTimestamp(String timestamp) { | |
| for (SimpleDateFormat format : ACCEPTED_TIMESTAMP_FORMATS) { | |
| // format.setTimeZone(TimeZone.getTimeZone("GMT")); | |
| format.setTimeZone(TimeZone.getDefault()); | |
| try { | |
| return format.parse(timestamp); | |
| } catch (ParseException ex) { | |
| continue; | |
| } | |
| } | |
| // All attempts to parse have failed | |
| return null; | |
| } | |
| public static boolean isValidFormatForIfModifiedSinceHeader(String timestamp) { | |
| try { | |
| return VALID_IFMODIFIEDSINCE_FORMAT.parse(timestamp)!=null; | |
| } catch (Exception ex) { | |
| return false; | |
| } | |
| } | |
| public static long timestampToMillis(String timestamp, long defaultValue) { | |
| if (TextUtils.isEmpty(timestamp)) { | |
| return defaultValue; | |
| } | |
| Date d = parseTimestamp(timestamp); | |
| return d == null ? defaultValue : d.getTime(); | |
| } | |
| public static String formatShortDate(Context context, Date date) { | |
| StringBuilder sb = new StringBuilder(); | |
| Formatter formatter = new Formatter(sb); | |
| return DateUtils.formatDateRange(context, formatter, date.getTime(), date.getTime(), | |
| DateUtils.FORMAT_ABBREV_ALL | DateUtils.FORMAT_NO_YEAR, | |
| TimeZone.getDefault().getID()).toString(); | |
| } | |
| public static String formatShortTime(Context context, Date time) { | |
| DateFormat format = DateFormat.getTimeInstance(DateFormat.SHORT); | |
| TimeZone tz = TimeZone.getDefault(); | |
| if (tz != null) { | |
| format.setTimeZone(tz); | |
| } | |
| return format.format(time); | |
| } | |
| /** | |
| * Returns "Today", "Tomorrow", "Yesterday", or a short date format. | |
| */ | |
| public static String formatHumanFriendlyShortDate(final Context context, long timestamp) { | |
| long localTimestamp, localTime; | |
| long now = System.currentTimeMillis(); | |
| TimeZone tz = TimeZone.getDefault(); | |
| localTimestamp = timestamp + tz.getOffset(timestamp); | |
| localTime = now + tz.getOffset(now); | |
| long dayOrd = localTimestamp / 86400000L; | |
| long nowOrd = localTime / 86400000L; | |
| if (dayOrd == nowOrd) { | |
| return context.getString(R.string.day_title_today); | |
| } else if (dayOrd == nowOrd - 1) { | |
| return context.getString(R.string.day_title_yesterday); | |
| } else if (dayOrd == nowOrd + 1) { | |
| return context.getString(R.string.day_title_tomorrow); | |
| } else { | |
| return formatShortDate(context, new Date(timestamp)); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment