Convert date in milliseconds to today, yesterday, last 7 days, last 30 days in Java

I have several documents and its created time is in milliseconds. I need to separate them as today, yesterday, last 7 days, last 30 days, more than 30 days.

I used the following code: convertSimpleDayFormat(1347022979786);

 public static String convertSimpleDayFormat(Long val) { long displayTime = System.currentTimeMillis() - val; displayTime = displayTime/86400000; String displayTimeVal = ""; if(displayTime <1) { displayTimeVal = "today"; } else if(displayTime<2) { displayTimeVal = "yesterday"; } else if(displayTime<7) { displayTimeVal = "last7days"; } else if(displayTime<30) { displayTimeVal = "last30days"; } else { displayTimeVal = "morethan30days"; } return displayTimeVal; } 

I subtract the current time and pass milliseconds and convert in one day.

But the problem I ran into is that I could not calculate the exact time for the date in milliseconds.

I want to calculate for Today as: from Midnight 00:00 to Midnight 24:00. (Exactly within 24 hours.)

Similarly, I want to accurately convert milliseconds to Today, Yesterday, Last 7 days, Last 30 days and more than 30 days.

+4
source share
2 answers
 private static Calendar clearTimes(Calendar c) { c.set(Calendar.HOUR_OF_DAY,0); c.set(Calendar.MINUTE,0); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); return c; } public static String convertSimpleDayFormat(long val) { Calendar today=Calendar.getInstance(); today=clearTimes(today); Calendar yesterday=Calendar.getInstance(); yesterday.add(Calendar.DAY_OF_YEAR,-1); yesterday=clearTimes(yesterday); Calendar last7days=Calendar.getInstance(); last7days.add(Calendar.DAY_OF_YEAR,-7); last7days=clearTimes(last7days); Calendar last30days=Calendar.getInstance(); last30days.add(Calendar.DAY_OF_YEAR,-30); last30days=clearTimes(last30days); if(val >today.getTimeInMillis()) { return "today"; } else if(val>yesterday.getTimeInMillis()) { return "yesterday"; } else if(val>last7days.getTimeInMillis()) { return "last7days"; } else if(val>last30days.getTimeInMillis()) { return "last30days"; } else { return "morethan30days"; } } 
+9
source

This is a small hack, not subject to serious tests. Use at your own risk. I made it extensible so you can add new durations.

 public static String prettyTimeStamp(long timeStamp) { Calendar c = Calendar.getInstance(); c.clear(Calendar.HOUR_OF_DAY); c.clear(Calendar.MINUTE); c.clear(Calendar.SECOND); c.clear(Calendar.MILLISECOND); long today = c.getTimeInMillis(); final long oneDay = 24 * 60 * 60 * 1000L; final long[] durations = new long[] { today - oneDay, today, today + 7 * oneDay, today + 30 * oneDay }; final String[] labels = "Yesterday,Today,Last 7 days,Last 30 Days,More than 30 Days" .split(","); int pos = Arrays.binarySearch(durations, timeStamp); return labels[pos < 0 ? ~pos : pos]; } 

By the way, you really should just use a library like PrettyTime

0
source

Source: https://habr.com/ru/post/1433297/


All Articles