**在我们写一个项目中难免会遇到时间的转化或时间的表,自己写已个又很费时,
在这里我写了几个方法希望与大家分享已下,废话不说直接上代码。**
import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author mengwx
* @date 2016-12-23
*/
public final class UtilDate {
private static Logger logger = LoggerFactory.getLogger(UtilDate.class);
/**
* 将毫秒时间转换为时:分:秒格式
* @param timeMillis
* @author HouQingrong
*/
public static final String formatTimeToString(long timeMillis) {
String result = "";
int timeSecond = (int) timeMillis / 1000;
if (timeSecond == 0)
return result;
int h, m, s;
h = timeSecond / 3600; // 时
m = timeSecond / 60 % 60; // 分
s = timeSecond % 60; // 秒
if (h < 0)
h = 0;
if (m < 0)
m = 0;
if (s < 0)
s = 0;
String hs = Integer.toString(h);
String ms = Integer.toString(m);
String ss = Integer.toString(s);
if (hs.length() < 2)
hs = "0" + hs; // 0变00,1变01
if (ms.length() < 2)
ms = "0" + ms;
if (ss.length() < 2)
ss = "0" + ss;
result = hs + ":" + ms + ":" + ss;
return result;
}
/**
* String转换年-月-日
* @param text
* @return
*/
public static final Date text2Date(String text) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = (Date) formatter.parse(text);
} catch (Exception e) {
}
return date;
}
public static final Date text2Date2(String text) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = (Date) formatter.parse(text);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static final Date text2Date3(String text) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = null;
try {
date = (Date) formatter.parse(text);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static final String Date2text(Calendar date) {
return Date2text(date.getTime());
}
public static final String Date2text(java.util.Date date) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String text="";
try {
text = formatter.format(date);
} catch (Exception e) {
}
return text;
}
public static final String Date3text(java.util.Date date) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String text="";
try {
text = formatter.format(date);
} catch (Exception e) {
}
return text;
}
public static final Timestamp long2Timestamp2010(long value) {
Timestamp temp = new Timestamp(value);
return Timestamp.valueOf("2010-01-01 " + temp.getHours() + ":" + temp.getMinutes() + ":" + temp.getSeconds());
}
public static final long time2Long2010(int hours, int minutes, int second) {
return Timestamp.valueOf("2010-01-01 " + hours + ":" + minutes + ":" + second).getTime();
}
public static final Timestamp string2Timestamp2010(String value) {
String tempstr = "2010-01-01 " + value.substring(0, 2) + ":" + value.substring(2, 4) + ":" + value.substring(4, 6);
return Timestamp.valueOf(tempstr);
}
public static final String time2String2010(int hours, int minutes, int seconds) {
String s_h = String.valueOf(hours);
String s_m = String.valueOf(minutes);
String s_s = String.valueOf(seconds);
if (hours < 10)
s_h = "0" + hours;
if (minutes < 10)
s_m = "0" + minutes;
if (seconds < 10)
s_s = "0" + seconds;
return s_h + s_m + s_s;
}
public static final long compareTwo2010TimeStamp(Timestamp now, Timestamp after) {
return now.getTime() - after.getTime();
}
public static final void writeTimeToBuffer(ByteBuffer buffer, Timestamp time) {
buffer.putShort((short)(time.getYear() + 1900));
buffer.put((byte)time.getMonth());
buffer.put((byte)time.getDate());
buffer.put((byte)time.getHours());
buffer.put((byte)time.getMinutes());
buffer.put((byte)time.getSeconds());
// System.out.println("Y: " + time.getYear() + ", M: " + time.getMonth() + ", D=" + time.getDate() + ", " +
// "H: " + time.getHours() + ", M: " + time.getMinutes() + ", S=" + time.getSeconds());
}
public static final short getLeftMin(long EndTime) {
return (short) ((EndTime - System.currentTimeMillis()) / (1000 * 60));
}
public static final int getLeftSec(long EndTime){
long nowTime = System.currentTimeMillis();
if(EndTime - nowTime <0){
return 0;
}
return (int)(EndTime - System.currentTimeMillis())/1000;
}
/**
* 是否是当月第一天
* @param iDate
* @return
*/
public static final boolean isFirstDayOfMonth(long iDate){
Calendar ca = Calendar.getInstance();
ca.setTime(new Timestamp(iDate));
int curDay = ca.get(Calendar.DAY_OF_MONTH);
return curDay==1;
}
/**
* 获得两个时间的自然日差值
* @param iDate1
* @param iDate2
* @return
* =0 同一天
* >0 前面日期大
* <0 后面日期大
*/
public static final int getBetweenDay(long iDate1,long iDate2){
int between=0;
Calendar cDate1 = Calendar.getInstance();
cDate1.setTime(new Timestamp(iDate1));
Calendar cDate2 = Calendar.getInstance();
cDate2.setTime(new Timestamp(iDate2));
int y1 = cDate1.get(Calendar.YEAR);
int y2 = cDate2.get(Calendar.YEAR);
if(y1==y2){ //同年 只计算日差
between = cDate1.get(Calendar.DAY_OF_YEAR) - cDate2.get(Calendar.DAY_OF_YEAR);
}else{
if(y1>y2){
between = cDate1.get(Calendar.DAY_OF_YEAR);
between += cDate2.getActualMaximum(Calendar.DAY_OF_YEAR)
- cDate2.get(Calendar.DAY_OF_YEAR);
between += ((y1-y2)-1)*365;
}else{
between = cDate2.get(Calendar.DAY_OF_YEAR);
between += cDate1.getActualMaximum(Calendar.DAY_OF_YEAR)
- cDate1.get(Calendar.DAY_OF_YEAR);
between += ((y2-y1)-1)*365;
between = -between;
}
}
return between;
}
/**
* 开始时间和结束时间格式固定为如下,例如10:30,,格式不正确都将返回不正确的结果
* @param startTime
* @param endTime
* @return
*/
public static boolean betweenTime(String startTime ,String endTime){
boolean result = false;
if(startTime== null && !startTime.isEmpty()) return result;
if(endTime== null && !endTime.isEmpty()) return result;
String[] starts = startTime.split(":");
String[] ends = endTime.split(":");
if(starts.length!= 2 && ends.length!=2) return result;
Calendar start = Calendar.getInstance();
start.set(Calendar.HOUR_OF_DAY, Integer.parseInt(starts[0]));
start.set(Calendar.MINUTE, Integer.parseInt(starts[1]));
start.set(Calendar.SECOND, 0);
Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));
end.set(Calendar.SECOND, 0);
Calendar now = Calendar.getInstance();
if(start.get(Calendar.YEAR) == end.get(Calendar.YEAR)
&& start.get(Calendar.DAY_OF_YEAR) == end.get(Calendar.DAY_OF_YEAR)
&& start.get(Calendar.YEAR) == now.get(Calendar.YEAR)
&& start.get(Calendar.DAY_OF_YEAR)==now.get(Calendar.DAY_OF_YEAR)){
if(now.before(end) && now.after(start)){
result = true;
logger.info("now :"+formatMToString(now.getTimeInMillis()));
logger.info("start :"+formatMToString(start.getTimeInMillis()));
logger.info("end :"+formatMToString(end.getTimeInMillis()));
}
}
return result;
}
/**
* 现在时间是否在两个时间段之间
* @param startTime
* @param endTime
* @return
*/
public static boolean betweenTimeD(Date startTime ,Date endTime){
boolean result = false;
if(startTime== null ) return result;
if(endTime== null ) return result;
Calendar start = Calendar.getInstance();
start.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
Calendar now = Calendar.getInstance();
//如果当前时间在结束前,并在开始后,则返回正确
if(now.before(end) && now.after(start)){
result = true;
logger.info("now :"+formatMToString(now.getTimeInMillis()));
logger.info("start :"+formatMToString(start.getTimeInMillis()));
logger.info("end :"+formatMToString(end.getTimeInMillis()));
}
return result;
}
public static boolean timeIsOver(Calendar startC,String endTime){
boolean result = false;
try{
String[] ends = endTime.split(":");
Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));
if(startC.after(end))
{
result = true;
}
}catch(Exception e)
{
}
return result;
}
/**
* 当前时间是否超过了endTime
* @param endTime
* @return
*/
public static boolean currentTimeIsOver(String endTime){
boolean result = false;
try{
String[] ends = endTime.split(":");
Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));
Calendar now = Calendar.getInstance();
if(now.after(end))
{
result = true;
}
}catch(Exception e)
{
}
return result;
}
/**
* 现在时间是否超过传入endTime的时间
* @param endTime
* @return
*/
public static boolean currentTimeIsOverD(Date endTime){
boolean result = false;
try{
Calendar end = Calendar.getInstance();
end.setTime(endTime);
Calendar now = Calendar.getInstance();
if(now.after(end))
{
result = true;
}
}catch(Exception e)
{
}
return result;
}
/**
* 最后进入的时间是否在startTime之前
* @param endTime
* @return
*/
public static boolean enterTimeIsOver(String startTime,long lastEnterTime){
boolean result = true;
try{
String[] startS = startTime.split(":");
//当前开始的时间段
Calendar startC = Calendar.getInstance();
startC.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startS[0]));
startC.set(Calendar.MINUTE, Integer.parseInt(startS[1]));
//进入的时间
Calendar enter = Calendar.getInstance();
enter.setTimeInMillis(lastEnterTime);
if(enter.before(startC))
{
result = true;
}else{
result = false;
}
}catch(Exception e)
{
}
return result;
}
/**
* 将毫秒数转为年月日时分
* @param timeMillis
* @return
*/
public static final String formatMToString(long timeMillis) {
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date(timeMillis);
return sdf.format(d);
}
catch(Exception e)
{
return "";
}
}
/**
* 取得当前时间小时数,24小时制 *
* @return
*/
public static final int getCurrentHour() {
Calendar current = Calendar.getInstance();
return current.get(Calendar.HOUR_OF_DAY);
}
/**
* 把用户的状态由int改为sting
* @param type
* @return
*/
public static String userTypeChange(int type){
String stringtype = null;
switch (type) {
case 0:
stringtype = "guest";
break;
case 1:
stringtype = "normal";
break;
case 2:
stringtype = "vip";
break;
default:
break;
}
return stringtype;
}
/**
* 获得两个时间是否是统一个月
* @param iDate1
* @param iDate2
* @return
*/
public static boolean isBetweenMouth(long iDate1,long iDate2){
Calendar cDate1 = Calendar.getInstance();
cDate1.setTime(new Timestamp(iDate1));
Calendar cDate2 = Calendar.getInstance();
cDate2.setTime(new Timestamp(iDate2));
int y1 = cDate1.get(Calendar.YEAR);
int y2 = cDate2.get(Calendar.YEAR);
int m1 = cDate1.get(Calendar.MONTH);
int m2 = cDate2.get(Calendar.MONTH);
if(y1==y2 && m1 == m2){ //同年 只计算日差
return true;
}else{
return false;
}
}
public static void main(String[] s){
// 4070880000000 2099-1-1 0:0:0
/*long l = 1341651000000L;
System.out.println(new Timestamp(l));
System.out.println(UtilDate.text2Date2("2011-12-2 11:0:0").getTime());
System.out.println(UtilDate.text2Date2("2011-12-2 11:20:0").getTime());
System.out.println(UtilDate.text2Date2("2011-12-2 11:30:0").getTime());
System.out.println(UtilDate.betweenTime("3:30", "4:00"));
System.out.println(UtilDate.betweenTime("3:00", "10:00"));
Calendar d1 = Calendar.getInstance();
for(int i = 1 ;i<31;i++){
Date d2 = UtilDate.text2Date2("2000-11-"+i+" 11:30:0");
System.out.println(Date2text(d2)+"-"+ Date2text(d1)+"="+
getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
}
for(int i = 1 ;i<32;i++){
Date d2 = UtilDate.text2Date2("2000-12-"+i+" 11:30:0");
System.out.println(Date2text(d2)+"-"+ Date2text(d1)+"="+
getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
}
for(int i = 1 ;i<32;i++){
Date d2 = UtilDate.text2Date2("2001-1-"+i+" 11:30:0");
System.out.print(Date2text(d2)+"-"+ Date2text(d1)+"=");
System.out.println(getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
}*/
Date date = text2Date("2016-12-23");
System.out.println(date);
}
}