Last active
December 7, 2018 09:36
-
-
Save piyush-malaviya/059761f7e51aa5f6960836e6cdcff575 to your computer and use it in GitHub Desktop.
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 java.util.Calendar; | |
public class DateTimeUtils { | |
private static final long SEC = 1000; | |
private static final long MIN = SEC * 60; | |
private static final long HOUR = MIN * 60; | |
private static final long DAY = HOUR * 24; | |
private static final long WEEK = DAY * 7; | |
private static final long YESTERDAY = DAY * 2; | |
private static final long YEAR = DAY * 365; | |
private static final long MONTH; | |
static { | |
int dayInFebruary = 28; | |
int year = Calendar.getInstance().get(Calendar.YEAR); | |
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { | |
dayInFebruary = 29; | |
} | |
int[] DAY_IN_MONTH = new int[]{31, dayInFebruary, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; | |
MONTH = DAY * (DAY_IN_MONTH[Calendar.getInstance().get(Calendar.MONTH)]); | |
} | |
private DateTimeUtils() { | |
} | |
public static ArrayList<Long> getWeekDayArray(long date) { | |
Calendar calendar = Calendar.getInstance(); | |
calendar.setTimeInMillis(date); | |
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); | |
Long[] dayValues = new Long[7]; | |
long ONE_DAY_IN_MILLIS = TimeUnit.DAYS.toMillis(1); | |
for (int pos = 0; pos < dayOfWeek; pos++) { | |
dayValues[dayOfWeek - 1 - pos] = calendar.getTimeInMillis(); | |
calendar.setTimeInMillis(calendar.getTimeInMillis() - ONE_DAY_IN_MILLIS); | |
} | |
calendar.setTimeInMillis(date); | |
for (int pos = dayOfWeek - 1; pos < 7; pos++) { | |
dayValues[pos] = calendar.getTimeInMillis(); | |
calendar.setTimeInMillis(calendar.getTimeInMillis() + ONE_DAY_IN_MILLIS); | |
} | |
return new ArrayList<>(Arrays.asList(dayValues)); | |
} | |
/** | |
* show formatted time from now | |
*/ | |
public static String fromNow(long firstTime, long secondTime) { | |
StringBuilder stringBuilder = new StringBuilder(); | |
long diff = Math.abs(secondTime - firstTime); | |
// year | |
long year = getYear(diff); | |
if (year > 0) { | |
stringBuilder.append(year).append(" year"); | |
if (year > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = (diff - (YEAR * year)); | |
} | |
// month | |
long month = getMonth(diff); | |
if (month > 0) { | |
stringBuilder.append(month).append(" month"); | |
if (month > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = diff - (MONTH * month); | |
} | |
// week | |
long week = getWeek(diff); | |
if (week > 0) { | |
stringBuilder.append(week).append(" week"); | |
if (week > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = diff - (WEEK * week); | |
} | |
// day | |
long day = getDay(diff); | |
if (day > 0) { | |
stringBuilder.append(day).append(" day"); | |
if (day > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = diff - (DAY * day); | |
} | |
// hour | |
long hour = getHour(diff); | |
if (hour > 0) { | |
stringBuilder.append(hour).append(" hour"); | |
if (hour > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = diff - (HOUR * hour); | |
} | |
// minute | |
long minute = getMinute(diff); | |
if (minute > 0) { | |
stringBuilder.append(minute).append(" minute"); | |
if (minute > 1) { | |
stringBuilder.append("s"); | |
} | |
stringBuilder.append(" "); | |
diff = diff - (MIN * minute); | |
} | |
// second | |
long second = getSecond(diff); | |
if (minute > 0) { | |
stringBuilder.append(second).append(" second"); | |
if (second > 1) { | |
stringBuilder.append("s"); | |
} | |
//stringBuilder.append(" "); | |
//diff = diff - (SEC * second); | |
} | |
return stringBuilder.toString(); | |
} | |
public static long getSecond(long time) { | |
return time / SEC; | |
} | |
public static long getMinute(long time) { | |
return time / MIN; | |
} | |
public static long getHour(long time) { | |
return time / HOUR; | |
} | |
public static long getDay(long time) { | |
return time / DAY; | |
} | |
public static long getWeek(long time) { | |
return time / WEEK; | |
} | |
public static long getMonth(long time) { | |
return time / MONTH; | |
} | |
public static long getYear(long time) { | |
return time / YEAR; | |
} | |
} | |
/** | |
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
try { | |
Date startDate = simpleDateFormat.parse("2016-05-01 18:25:10"); | |
Date endDate = simpleDateFormat.parse("2017-07-25 20:00:00"); | |
String dateFormatted = DateTimeUtils.fromNow(startDate.getTime(), endDate.getTime()); | |
Log.e(TAG, "onCreate: " + dateFormatted); | |
} catch (ParseException e) { | |
e.printStackTrace(); | |
} | |
Output: | |
onCreate: 1 year 2 months 3 weeks 2 days 1 hour 34 minutes 50 seconds | |
**/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment