以前有牛人分享的代码:
java实现几分钟前,几小时前,几天前的代码
有点复杂,所以在stackoverflow上找了一个简单的,改写了下符合需求,给大家分享下。
03 | import java.text.ParseException; |
04 | import java.text.SimpleDateFormat; |
05 | import java.util.Date; |
07 | public class RelativeDateFormat { |
09 | private static final long ONE_MINUTE = 60000L; |
10 | private static final long ONE_HOUR = 3600000L; |
11 | private static final long ONE_DAY = 86400000L; |
12 | private static final long ONE_WEEK = 604800000L; |
14 | private static final String ONE_SECOND_AGO = "秒前" ; |
15 | private static final String ONE_MINUTE_AGO = "分钟前" ; |
16 | private static final String ONE_HOUR_AGO = "小时前" ; |
17 | private static final String ONE_DAY_AGO = "天前" ; |
18 | private static final String ONE_MONTH_AGO = "月前" ; |
19 | private static final String ONE_YEAR_AGO = "年前" ; |
21 | public static void main(String[] args) throws ParseException { |
22 | SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:m:s" ); |
23 | Date date = format.parse( "2013-11-11 18:35:35" ); |
24 | System.out.println(format(date)); |
27 | public static String format(Date date) { |
28 | long delta = new Date().getTime() - date.getTime(); |
29 | if (delta < 1L * ONE_MINUTE) { |
30 | long seconds = toSeconds(delta); |
31 | return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO; |
33 | if (delta < 45L * ONE_MINUTE) { |
34 | long minutes = toMinutes(delta); |
35 | return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO; |
37 | if (delta < 24L * ONE_HOUR) { |
38 | long hours = toHours(delta); |
39 | return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO; |
41 | if (delta < 48L * ONE_HOUR) { |
44 | if (delta < 30L * ONE_DAY) { |
45 | long days = toDays(delta); |
46 | return (days <= 0 ? 1 : days) + ONE_DAY_AGO; |
48 | if (delta < 12L * 4L * ONE_WEEK) { |
49 | long months = toMonths(delta); |
50 | return (months <= 0 ? 1 : months) + ONE_MONTH_AGO; |
52 | long years = toYears(delta); |
53 | return (years <= 0 ? 1 : years) + ONE_YEAR_AGO; |
57 | private static long toSeconds( long date) { |
61 | private static long toMinutes( long date) { |
62 | return toSeconds(date) / 60L; |
65 | private static long toHours( long date) { |
66 | return toMinutes(date) / 60L; |
69 | private static long toDays( long date) { |
70 | return toHours(date) / 24L; |
73 | private static long toMonths( long date) { |
74 | return toDays(date) / 30L; |
77 | private static long toYears( long date) { |
78 | return toMonths(date) / 365L; |
有需要的可以下载,可以自己修改测试代码测试。