package com.easemob.chatuidemo.utils;
import java.text.DateFormat;
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 com.easemob.applib.controller.HXSDKHelper;
import com.easemob.util.TimeInfo;
public class DateUtils {
private static final long INTERVAL_IN_MILLISECONDS = 30 * 1000;
public static String getTimestampString(Date messageDate) {
Locale curLocale = HXSDKHelper.getInstance().getAppContext().getResources().getConfiguration().locale;
String languageCode = curLocale.getLanguage();
boolean isChinese = languageCode.contains("zh");
String format = null;
long messageTime = messageDate.getTime();
if (isSameDay(messageTime)) {
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(messageDate);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
format = "HH:mm";
if (hour > 17) {
if(isChinese){
format = "晚上 hh:mm";
}
}else if(hour >= 0 && hour <= 6){
if(isChinese){
format = "凌晨 hh:mm";
}
} else if (hour > 11 && hour <= 17) {
if(isChinese){
format = "下午 hh:mm";
}
} else {
if(isChinese){
format = "上午 hh:mm";
}
}
} else if (isYesterday(messageTime)) {
if(isChinese){
format = "昨天 HH:mm";
}else{
format = "MM-dd HH:mm";
}
} else {
if(isChinese){
format = "M月d日 HH:mm";
}else{
format = "MM-dd HH:mm";
}
}
if(isChinese){
return new SimpleDateFormat(format, Locale.CHINA).format(messageDate);
}else{
return new SimpleDateFormat(format, Locale.US).format(messageDate);
}
}
public static boolean isCloseEnough(long time1, long time2) {
// long time1 = date1.getTime();
// long time2 = date2.getTime();
long delta = time1 - time2;
if (delta < 0) {
delta = -delta;
}
return delta < INTERVAL_IN_MILLISECONDS;
}
private static boolean isSameDay(long inputTime) {
TimeInfo tStartAndEndTime = getTodayStartAndEndTime();
if(inputTime>tStartAndEndTime.getStartTime()&&inputTime<tStartAndEndTime.getEndTime())
return true;
return false;
}
private static boolean isYesterday(long inputTime) {
TimeInfo yStartAndEndTime = getYesterdayStartAndEndTime();
if(inputTime>yStartAndEndTime.getStartTime()&&inputTime<yStartAndEndTime.getEndTime())
return true;
return false;
}
public static Date StringToDate(String dateStr, String formatStr) {
DateFormat format = new SimpleDateFormat(formatStr);
Date date = null;
try {
date = format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
*
* @param timeLength Millisecond
* @return
*/
public static String toTime(int timeLength) {
timeLength /= 1000;
int minute = timeLength / 60;
int hour = 0;
if (minute >= 60) {
hour = minute / 60;
minute = minute % 60;
}
int second = timeLength % 60;
// return String.format("%02d:%02d:%02d", hour, minute, second);
return String.format("%02d:%02d", minute, second);
}
/**
*
* @param timeLength second
* @return
*/
public static String toTimeBySecond(int timeLength) {
// timeLength /= 1000;
int minute = timeLength / 60;
int hour = 0;
if (minute >= 60) {
hour = minute / 60;
minute = minute % 60;
}
int second = timeLength % 60;
// return String.format("%02d:%02d:%02d", hour, minute, second);
return String.format("%02d:%02d", minute, second);
}
public static TimeInfo getYesterdayStartAndEndTime() {
Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.DATE, -1);
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date startDate = calendar1.getTime();
long startTime = startDate.getTime();
Calendar calendar2 = Calendar.getInstance();
calendar2.add(Calendar.DATE, -1);
calendar2.set(Calendar.HOUR_OF_DAY, 23);
calendar2.set(Calendar.MINUTE, 59);
calendar2.set(Calendar.SECOND, 59);
calendar2.set(Calendar.MILLISECOND, 999);
Date endDate = calendar2.getTime();
long endTime = endDate.getTime();
TimeInfo info = new TimeInfo();
info.setStartTime(startTime);
info.setEndTime(endTime);
return info;
}
public static TimeInfo getTodayStartAndEndTime() {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date startDate = calendar1.getTime();
long startTime = startDate.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss S");
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.HOUR_OF_DAY, 23);
calendar2.set(Calendar.MINUTE, 59);
calendar2.set(Calendar.SECOND, 59);
calendar2.set(Calendar.MILLISECOND, 999);
Date endDate = calendar2.getTime();
long endTime = endDate.getTime();
TimeInfo info = new TimeInfo();
info.setStartTime(startTime);
info.setEndTime(endTime);
return info;
}
public static TimeInfo getBeforeYesterdayStartAndEndTime() {
Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.DATE, -2);
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date startDate = calendar1.getTime();
long startTime = startDate.getTime();
Calendar calendar2 = Calendar.getInstance();
calendar2.add(Calendar.DATE, -2);
calendar2.set(Calendar.HOUR_OF_DAY, 23);
calendar2.set(Calendar.MINUTE, 59);
calendar2.set(Calendar.SECOND, 59);
calendar2.set(Calendar.MILLISECOND, 999);
Date endDate = calendar2.getTime();
long endTime = endDate.getTime();
TimeInfo info = new TimeInfo();
info.setStartTime(startTime);
info.setEndTime(endTime);
return info;
}
/**
* endtime为今天
* @return
*/
public static TimeInfo getCurrentMonthStartAndEndTime(){
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.DATE, 1);
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date startDate = calendar1.getTime();
long startTime = startDate.getTime();
Calendar calendar2 = Calendar.getInstance();
// calendar2.set(Calendar.HOUR_OF_DAY, 23);
// calendar2.set(Calendar.MINUTE, 59);
// calendar2.set(Calendar.SECOND, 59);
// calendar2.set(Calendar.MILLISECOND, 999);
Date endDate = calendar2.getTime();
long endTime = endDate.getTime();
TimeInfo info = new TimeInfo();
info.setStartTime(startTime);
info.setEndTime(endTime);
return info;
}
public static TimeInfo getLastMonthStartAndEndTime(){
Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.MONTH, -1);
calendar1.set(Calendar.DATE, 1);
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date startDate = calendar1.getTime();
long startTime = startDate.getTime();
Calendar calendar2 = Calendar.getInstance();
calendar2.add(Calendar.MONTH, -1);
calendar2.set(Calendar.DATE, 1);
calendar2.set(Calendar.HOUR_OF_DAY, 23);
calendar2.set(Calendar.MINUTE, 59);
calendar2.set(Calendar.SECOND, 59);
calendar2.set(Calendar.MILLISECOND, 999);
calendar2.roll(Calendar.DATE, - 1 );
Date endDate = calendar2.getTime();
long endTime = endDate.getTime();
TimeInfo info = new TimeInfo();
info.setStartTime(startTime);
info.setEndTime(endTime);
return info;
}
public static String getTimestampStr() {
return Long.toString(System.currentTimeMillis());
}
}