/*
|
* Copyright 2011 gitblit.com.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
package com.gitblit.utils;
|
|
import java.util.Calendar;
|
import java.util.Date;
|
|
public class TimeUtils {
|
public static final long MIN = 1000 * 60L;
|
|
public static final long HALFHOUR = MIN * 30L;
|
|
public static final long ONEHOUR = HALFHOUR * 2;
|
|
public static final long ONEDAY = ONEHOUR * 24L;
|
|
public static final long ONEYEAR = ONEDAY * 365L;
|
|
public static boolean isToday(Date date) {
|
return (System.currentTimeMillis() - date.getTime()) < ONEDAY;
|
}
|
|
public static boolean isYesterday(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
cal.add(Calendar.DATE, 1);
|
return (System.currentTimeMillis() - cal.getTimeInMillis()) < ONEDAY;
|
}
|
|
public static String duration(int days) {
|
if (days <= 60) {
|
return days + (days > 1 ? " days" : " day");
|
} else if (days < 365) {
|
int rem = days % 30;
|
return ((days / 30) + (rem >= 15 ? 1 : 0)) + " months";
|
} else {
|
int years = days / 365;
|
int rem = days % 365;
|
String yearsString = years + (years > 1 ? " years" : " year");
|
if (rem < 30) {
|
if (rem == 0) {
|
return yearsString;
|
} else {
|
return yearsString + (rem >= 15 ? ", 1 month" : "");
|
}
|
} else {
|
int months = rem / 30;
|
int remDays = rem % 30;
|
if (remDays >= 15) {
|
months++;
|
}
|
String monthsString = yearsString + ", " + months
|
+ (months > 1 ? " months" : " month");
|
return monthsString;
|
}
|
}
|
}
|
|
public static int minutesAgo(Date date, long endTime, boolean roundup) {
|
long diff = endTime - date.getTime();
|
int mins = (int) (diff / MIN);
|
if (roundup && (diff % MIN) >= 30) {
|
mins++;
|
}
|
return mins;
|
}
|
|
public static int minutesAgo(Date date, boolean roundup) {
|
return minutesAgo(date, System.currentTimeMillis(), roundup);
|
}
|
|
public static int hoursAgo(Date date, boolean roundup) {
|
long diff = System.currentTimeMillis() - date.getTime();
|
int hours = (int) (diff / ONEHOUR);
|
if (roundup && (diff % ONEHOUR) >= HALFHOUR) {
|
hours++;
|
}
|
return hours;
|
}
|
|
public static int daysAgo(Date date, boolean roundup) {
|
long diff = System.currentTimeMillis() - date.getTime();
|
int days = (int) (diff / ONEDAY);
|
if (roundup && (diff % ONEDAY) > 0) {
|
days++;
|
}
|
return days;
|
}
|
|
public static String timeAgo(Date date) {
|
return timeAgo(date, false);
|
}
|
|
public static String timeAgoCss(Date date) {
|
return timeAgo(date, true);
|
}
|
|
private static String timeAgo(Date date, boolean css) {
|
String ago = null;
|
if (isToday(date) || isYesterday(date)) {
|
int mins = minutesAgo(date, true);
|
if (mins >= 120) {
|
if (css) {
|
return "age1";
|
}
|
int hours = hoursAgo(date, true);
|
if (hours > 23) {
|
ago = "yesterday";
|
} else {
|
ago = hours + " hours ago";
|
}
|
} else {
|
if (css) {
|
return "age0";
|
}
|
ago = mins + " min" + (mins > 1 ? "s" : "") + " ago";
|
}
|
} else {
|
if (css) {
|
return "age2";
|
}
|
int days = daysAgo(date, true);
|
if (days < 365) {
|
if (days <= 30) {
|
ago = days + " days ago";
|
} else if (days <= 90) {
|
int weeks = days / 7;
|
if (weeks == 12) {
|
ago = "3 months ago";
|
} else {
|
ago = weeks + " weeks ago";
|
}
|
} else if (days > 90) {
|
int months = days / 30;
|
int weeks = (days % 30) / 7;
|
if (weeks >= 2) {
|
months++;
|
}
|
ago = months + " months ago";
|
}
|
} else if (days == 365) {
|
ago = "1 year ago";
|
} else {
|
int yr = days / 365;
|
days = days % 365;
|
int months = (yr * 12) + (days / 30);
|
if (months > 23) {
|
ago = yr + " years ago";
|
} else {
|
ago = months + " months ago";
|
}
|
}
|
}
|
return ago;
|
}
|
}
|