package com.netease.nim.uikit.common.util.sys;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
public class TimeUtil {
public static boolean isEarly(int days, long time) {
return (currentTimeMillis() - time) > (days * 24 * 3600 * 1000);
}
public static int currentTimeSecond() {
return (int) (System.currentTimeMillis() / 1000);
}
public static long currentTimeMillis() {
return System.currentTimeMillis();
}
public static long[] getTsTimes() {
long[] times = new long[2];
Calendar calendar = Calendar.getInstance();
times[0] = calendar.getTimeInMillis() / 1000;
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
times[1] = calendar.getTimeInMillis() / 1000;
return times;
}
public static String getFormatDatetime(int year, int month, int day) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(new GregorianCalendar(year, month, day).getTime());
}
public static Date getDateFromFormatString(String formatDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(formatDate);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static String getNowDatetime() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return (formatter.format(new Date()));
}
public static int getNow() {
return (int) ((new Date()).getTime() / 1000);
}
public static String getNowDateTime(String format) {
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat(format, Locale.getDefault());
return df.format(date);
}
public static String getDateString(long milliseconds) {
return getDateTimeString(milliseconds, "yyyyMMdd");
}
public static String getTimeString(long milliseconds) {
return getDateTimeString(milliseconds, "HHmmss");
}
public static String getBeijingNowTimeString(String format) {
TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai");
Date date = new Date(currentTimeMillis());
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
formatter.setTimeZone(timezone);
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTimeZone(timezone);
String prefix = gregorianCalendar.get(Calendar.AM_PM) == Calendar.AM ? "上午" : "下午";
return prefix + formatter.format(date);
}
public static String getBeijingNowTime(String format) {
TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai");
Date date = new Date(currentTimeMillis());
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
formatter.setTimeZone(timezone);
return formatter.format(date);
}
public static String getDateTimeString(long milliseconds, String format) {
Date date = new Date(milliseconds);
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
return formatter.format(date);
}
public static String getFavoriteCollectTime(long milliseconds) {
String showDataString = "";
Date today = new Date();
Date date = new Date(milliseconds);
Date firstDateThisYear = new Date(today.getYear(), 0, 0);
if (!date.before(firstDateThisYear)) {
SimpleDateFormat dateformatter = new SimpleDateFormat("MM-dd", Locale.getDefault());
showDataString = dateformatter.format(date);
} else {
SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
showDataString = dateformatter.format(date);
}
return showDataString;
}
public static String getTimeShowString(long milliseconds, boolean abbreviate) {
String dataString;
String timeStringBy24;
Date currentTime = new Date(milliseconds);
Date today = new Date();
Calendar todayStart = Calendar.getInstance();
todayStart.set(Calendar.HOUR_OF_DAY, 0);
todayStart.set(Calendar.MINUTE, 0);
todayStart.set(Calendar.SECOND, 0);
todayStart.set(Calendar.MILLISECOND, 0);
Date todaybegin = todayStart.getTime();
Date yesterdaybegin = new Date(todaybegin.getTime() - 3600 * 24 * 1000);
Date preyesterday = new Date(yesterdaybegin.getTime() - 3600 * 24 * 1000);
if (!currentTime.before(todaybegin)) {
dataString = "今天";
} else if (!currentTime.before(yesterdaybegin)) {
dataString = "昨天";
} else if (!currentTime.before(preyesterday)) {
dataString = "前天";
} else if (isSameWeekDates(currentTime, today)) {
dataString = getWeekOfDate(currentTime);
} else {
SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
dataString = dateformatter.format(currentTime);
}
SimpleDateFormat timeformatter24 = new SimpleDateFormat("HH:mm", Locale.getDefault());
timeStringBy24 = timeformatter24.format(currentTime);
if (abbreviate) {
if (!currentTime.before(todaybegin)) {
return getTodayTimeBucket(currentTime);
} else {
return dataString;
}
} else {
return dataString + " " + timeStringBy24;
}
}
/**
* 根据不同时间段,显示不同时间
*
* @param date
* @return
*/
public static String getTodayTimeBucket(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
SimpleDateFormat timeformatter0to11 = new SimpleDateFormat("KK:mm", Locale.getDefault());
SimpleDateFormat timeformatter1to12 = new SimpleDateFormat("hh:mm", Locale.getDefault());
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour >= 0 && hour < 5) {
return "凌晨 " + timeformatter0to11.format(date);
} else if (hour >= 5 && hour < 12) {
return "上午 " + timeformatter0to11.format(date);
} else if (hour >= 12 && hour < 18) {
return "下午 " + timeformatter1to12.format(date);
} else if (hour >= 18 && hour < 24) {
return "晚上 " + timeformatter1to12.format(date);
}
return "";
}
/**
* 根据日期获得星期
*
* @param date
* @return
*/
public static String getWeekOfDate(Date date) {
String[] weekDaysName = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
// String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return weekDaysName[intWeek];
}
public static boolean isSameDay(long time1, long time2) {
return isSameDay(new Date(time1), new Date(time2));
}
public static boolean isSameDay(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
return sameDay;
}
/**
* 判断两个日期是否在同一周
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
return false;
}
public static long getSecondsByMilliseconds(long milliseconds) {
long seconds = new BigDecimal((float) ((float) milliseconds / (float) 1000)).setScale(0,
BigDecimal.ROUND_HALF_UP).intValue();
// if (seconds == 0) {
// seconds = 1;
// }
return seconds;
}
public static String secToTime(int time) {
String timeStr = null;
int hour = 0;
int minute = 0;
int second = 0;
if (time <= 0)
return "00:00";
else {
minute = time / 60;
if (minute < 60) {
second = time % 60;
timeStr = unitFormat(minute) + ":" + unitFormat(second);
} else {
hour = minute / 60;
if (hour > 99)
return "99:59:59";
minute = minute % 60;
second = time - hour * 3600 - minute * 60;
timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second);
}
}
return timeStr;
}
public static String unitFormat(int i) {
String retStr = null;
if (i >= 0 && i < 10)
retStr = "0" + Integer.toString(i);
else retStr = "" + i;
return retStr;
}
public static String getElapseTimeForShow(int milliseconds) {
StringBuilder sb = new StringBuilder();
int seconds = milliseconds / 1000;
if (seconds < 1)
seconds = 1;
int hour = seconds / (60 * 60);
if (hour != 0) {
sb.append(hour).append("小时");
}
int minute = (seconds - 60 * 60 * hour) / 60;
if (minute != 0) {
sb.append(minute).append("分");
}
int second = (seconds - 60 * 60 * hour - 60 * minute);
if (second != 0) {
sb.append(second).append("秒");
}
return sb.toString();
}
}