JAVA --时间辅助类

 

 

import java.sql.SQLException;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

 

 

/**

 * @类描述:时间辅助类 

 */

public class TimeHelper {

/**

* java中的时间格式字符串没有秒<br>

* 值 : yyyy-MM-dd HH:mm

*/

public final static String JAVA_TIME_FORAMTER_1 = "yyyy-MM-dd HH:mm";

/**

* java中的时间格式字符串精确到秒<br>

* 值 : yyyy-MM-dd HH:mm:ss

*/

public final static String JAVA_TIME_FORAMTER_2 = "yyyy-MM-dd HH:mm:ss";

/**

* java中的时间格式字符串没有秒<br>

* 值 : yyyyMMddHHmm

*/

public final static String JAVA_TIME_FORAMTER_3 = "yyyyMMddHHmm";

/**

* java中的时间格式字符串精确到秒<br>

* 值 : yyyyMMddHHmmss

*/

public final static String JAVA_TIME_FORAMTER_4 = "yyyyMMddHHmmss";

/**

* java中的时间格式字符串<br>

* 值 : HH:mm

*/

public final static String JAVA_TIME_FORAMTER_5 = "HH:mm";

/**

* java中的时间格式字符串<br>

* 值 : HH:mm:ss

*/

public final static String JAVA_TIME_FORAMTER_6 = "HH:mm:ss";

/**

* java中的时间格式字符串精确到秒<br>

* 值 : yyyy-MM-dd@HH:mm

*/

public final static String JAVA_TIME_FORAMTER_7 = "yyyy-MM-dd@HH:mm";

/**

* java中的时间格式字符串精确到秒<br>

* 值 : yyyy-MM-dd-HHmmss

*/

public final static String JAVA_TIME_FORAMTER_8 = "yyyy-MM-dd-HHmmss";

/**

* java中的时间格式字符串精确到秒<br>

* 值 : yyMMddHHmmss

*/

public final static String JAVA_TIME_FORAMTER_9 = "yyMMddHHmmss";

/**

* java中的日期格式字符串<br>

* 值 : yyyy-MM-dd

*/

public final static String JAVA_DATE_FORAMTER_1 = "yyyy-MM-dd";

/**

* java中的日期格式字符串<br>

* 值 : yyyy-MM

*/

public final static String JAVA_DATE_FORAMTER_3 = "yyyy-MM";

/**

* java中的日期格式字符串<br>

* 值 : yyyyMMdd

*/

public final static String JAVA_DATE_FORAMTER_2 = "yyyyMMdd";

/**

* java中的日期格式字符串<br>

* 值 : yyyyMM

*/

public final static String JAVA_DATE_FORAMTER_MONTH="yyyyMM";

 

/**

* 数据库中的时间格式字符串没有秒<br>

* 值 : yyyy-mm-dd hh24:mi

*/

public final static String SQL_TIME_FORAMTER_1 = "yyyy-mm-dd hh24:mi";

/**

* 数据库中的时间格式字符串精确到秒<br>

* 值 : yyyy-mm-dd hh24:mi:ss

*/

public final static String SQL_TIME_FORAMTER_2 = "yyyy-mm-dd hh24:mi:ss";

/**

* 数据库中的时间格式字符串没有秒<br>

* 值 : yyyymmddhh24mi

*/

public final static String SQL_TIME_FORAMTER_3 = "yyyymmddhh24mi";

/**

* 数据库中的时间格式字符串精确到秒<br>

* 值 : yyyymmddhh24miss

*/

public final static String SQL_TIME_FORAMTER_4 = "yyyymmddhh24miss";

/**

* 数据库中的时间格式字符串<br>

* 值 : hh24mi

*/

public final static String SQL_TIME_FORAMTER_5 = "hh24mi";

/**

* 数据库中的时间格式字符串<br>

* 值 : hh24miss

*/

public final static String SQL_TIME_FORAMTER_6 = "hh24miss";

/**

* 数据库中的日期格式字符串<br>

* 值 : yyyy-mm-dd

*/

public final static String SQL_DATE_FORAMTER_1 = "yyyy-mm-dd";

/**

* 数据库中的日期格式字符串<br>

* 值 : yyyymmdd

*/

public final static String SQL_DATE_FORAMTER_2 = "yyyymmdd";

/**

* 得到一个格式化之后的时间

* @param formaterStr 格式字符串

* @param date 时间

*/

public static String date2str(String formaterStr, Date date) {

DateFormat tf = new SimpleDateFormat(formaterStr);

return tf.format(date);

}

/**

* 得到当前时间

*/

public static Date getCurrentDate() {

return Calendar.getInstance().getTime();

}

/**

* 按格式字符串得到当前时间有一秒的延时

* @param formater 格式字符串

*/

public static synchronized String getCurrentDateHasDelay(String formaterStr) {

try {

Thread.currentThread().sleep(1000);//防止多线程时产生两个相同的时间

} catch (InterruptedException e) {

for(int i = 0; i < 1000; i++) {//出现异常时用程序延时计算一千万次

 

for(int j = 0; j < 10000; j++);

}

}

return getCurrentDateNotHasDelay(formaterStr);

}

/**

* 按格式字符串得到当前时间没有延时

* @param formater 格式字符串

*/

public static String getCurrentDateNotHasDelay(String formaterStr) {

return date2str(formaterStr, getCurrentDate());

}

/**

* 按格式字符串得到当前时间没有延时

* @param formater 格式字符串值 : yyyy-MM-dd HH:mm:ss

*/

public static String getCurrentDateNotHasDelay() {

return getCurrentDateNotHasDelay(JAVA_TIME_FORAMTER_2);

}

/**

* 按格式字符串得到时间

* @param formater 格式字符串

*/

public static Date str2date(String formaterStr, String param) {

DateFormat tf = new SimpleDateFormat(formaterStr);

Date date = null;

try {

date = tf.parse(param);

} catch (ParseException e) {

e.printStackTrace();

}

return date;

}

/**

* 按格式字符串得到时间的Long

* @param formater 格式字符串

* @param time 时间

*/

public static long time2long(String formaterStr, String time) {

DateFormat tf = new SimpleDateFormat(formaterStr);

long var = 0;

try {

var = tf.parse(time).getTime();

} catch (ParseException e) {

e.printStackTrace();

}

return var;

}

/**

* 已Long长度得到按格式字符串时间

* @param formater 格式字符串

* @param time 时间

*/

public static String long2time(String formaterStr, long timeLong) {

DateFormat tf = new SimpleDateFormat(formaterStr);

return tf.format(new Date(timeLong));

}

/**

* 得到在一个时间之后的days天的时间

* @param formater 格式字符串

* @param time 时间

* @param days 天数

*/

public static String timeAfterDays(String formaterStr, String time, int days) {

return timeAfterHours(formaterStr, time, 24 * days);

}

/**

* 得到在一个时间之后的days天的时间

* @param formater 格式字符串

* @param time 时间

* @param days 天数

*/

public static String timeAfterHours(String formaterStr, String time, int hours) {

return timeAfterMinute(formaterStr, time, 60 * hours);

}

/**

* 得到在一个时间之后的days天的时间

* @param formater 格式字符串

* @param time 时间

* @param days 天数

*/

public static String timeAfterMinute(String formaterStr, String time, int minute) {

long curTimeLong = time2long(formaterStr, time);

long proTimeLong = ((curTimeLong / 1000L) + (60L * minute)) * 1000L;

return long2time(formaterStr, proTimeLong);

}

 

/**

* 根据日期字符串计算星期几

*/

public static String calculateWeek(String formaterStr, String param) {

Date date = str2date(formaterStr, param);

DateFormat tf = new SimpleDateFormat("E");//E:代表是星期,F:代表周

String weekStr = tf.format(date);// 格式:星期X

return weekStr.substring(weekStr.length() - 1);// 返回:X

}

/**

* 得到指定两日期相隔的天数

*/

public static int calculateDays(String formaterStr1, String dateStr1, String formaterStr2, String dateStr2) {

Date date1 = str2date(formaterStr1, dateStr1);

Date date2 = str2date(formaterStr2, dateStr2);

int days = (int)((date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24)) + 1;

return days;

}

/**

* 得到指定两日期相隔的天数

*/

public static int calculateDays(String formaterStr, String dateStr1, String dateStr2) {

return calculateDays(formaterStr, dateStr1, formaterStr, dateStr2);

}

/**

* 判断是否时间timeStr1小于时间timeStr2

*/

public static boolean time1LTTime2(String formaterStr1, String timeStr1, 

String formaterStr2, String timeStr2) {

Date date1 = str2date(formaterStr1, timeStr1);

Date date2 = str2date(formaterStr2, timeStr2);

if(date2.getTime() - date1.getTime() > 0) {

return true;

} else {

return false;

}

}

/**

* 判断是否时间timeStr1小于等于时间timeStr2

*/

public static boolean time1LTEQTime2(String formaterStr1, String timeStr1, 

String formaterStr2, String timeStr2) {

Date date1 = str2date(formaterStr1, timeStr1);

Date date2 = str2date(formaterStr2, timeStr2);

if(date2.getTime() - date1.getTime() >= 0) {

return true;

} else {

return false;

}

}

/**

* 判断是否时间timeStr1小于时间timeStr2

*/

public static boolean time1LTTime2(String formaterStr, String timeStr1, String timeStr2) throws ParseException {

return time1LTTime2(formaterStr, timeStr1, formaterStr, timeStr2);

}

 

/**

* 得到数据库的时间

*/

public static String getDBDate(String formaterStr,String dbName) {

String sqlTime = "select to_char(sysdate, '" + formaterStr + "') dbtime from dual";

try {

return SQLExecutor.queryFieldWithDBName(dbName, sqlTime);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return "";

}

/**

* 判断是否时间timeStr1小于等于时间timeStr2

*/

public static boolean time1LTEQTime2(String formaterStr, String timeStr1, String timeStr2) {

return time1LTEQTime2(formaterStr, timeStr1, formaterStr, timeStr2);

}

/**

* 时间格式的转换

* @param proFmtStr 原来的格式

* @param time 2009-8-1@23:1

* @param afterFmtStr 要转换的格式

* @return 2009-08-01@23:01

*/

public static String formaterTime(String proFmtStr, String time, String afterFmtStr) {

return date2str(afterFmtStr, str2date(proFmtStr, time));

}

/**

* 格式化时间

* @param time 2009-8-1@23:1

* @return 2009-08-01@23:01

*/

public static String formaterTime(String formaterStr, String time) throws ParseException {

return formaterTime(formaterStr, time, formaterStr);

}

/**

     * 功能:设置日期

     * @param date Date 需要设置的日期

     * @param field int 需要设置的字段

     * @param value int 设置的内容

     * @return Date 设置后的日期

     */

    public static Date setDate(Date date, int field, int value) {

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(date);

        calendar.set(field, value);

        return calendar.getTime();

    }

 

    /**

     * 判断今天是否当前月的第一天

     * @return 是true, 否false

     */

public static boolean isFirstDay4Month() {

String now = getCurrentDateNotHasDelay(JAVA_DATE_FORAMTER_1);

if("01".equals(now.split("-")[2])) {

return true;

}

return false;

}

 

/**

     * 判断今天是否是周日

     * @return 是true, 否false

     */

public static boolean isSunday() {

return isSunday(JAVA_DATE_FORAMTER_1, getCurrentDateNotHasDelay(JAVA_DATE_FORAMTER_1));

}

/**

     * 判断今天是否是周日

     * @return 是true, 否false

     */

public static boolean isSunday(String formaterStr, String day) {

String week = calculateWeek(formaterStr, day);

if("日".equals(week)) {

return true;

}

return false;

}

/**

     * 判断是否是今天

     * @return 是true, 否false

     */

public static boolean isToday(String formaterStr, String time) {

String day = formaterTime(formaterStr, time, JAVA_DATE_FORAMTER_1);

String today = getCurrentDateNotHasDelay(JAVA_DATE_FORAMTER_1);

if(day.equals(today)) {

return true;

}

return false;

}

/**

* 得到一个月的天数

*/

public static int getDay4Month(String formaterStr, String time) {

Calendar rightNow = Calendar.getInstance();

rightNow.setTime(str2date(formaterStr, time));

return rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);

}

/**

* 得到两个月之间的天数

*/

public static int getDay4TwainMonth(String formaterStr, String time, String formaterStr1, String time1) {

int days = 0;

String iTime = formaterTime(formaterStr, time, JAVA_DATE_FORAMTER_3);

String endTime = formaterTime(formaterStr1, time1, JAVA_DATE_FORAMTER_3);

if(!time1LTEQTime2(JAVA_DATE_FORAMTER_3, iTime, endTime)) {

return days;

}

do {

days += getDay4Month(JAVA_DATE_FORAMTER_3, iTime);

iTime = getNextMonth(JAVA_DATE_FORAMTER_3, iTime);

} while (iTime.equals(endTime));

return days;

}

/**

* 得到下一个月份

* @return 返回的下个月, 格式: yyyy-mm

*/

public static String getNextMonth(String formaterStr, String time) {

String m = formaterTime(formaterStr, time, JAVA_DATE_FORAMTER_3);

int y = Integer.parseInt(m.split("-")[0]);

int nm = Integer.parseInt(m.split("-")[1]) + 1;

String nextMonth = nm + "";

if(nm < 10) {

nextMonth = "0" + nm;

} else {

if(nm == 13) {

y++;

nextMonth = "01";

}

}

return y + "-" + nextMonth;

}

/**

* 得到上一个月份

* @return 返回的上个月, 格式: yyyy-mm

*/

public static String getPreMonth(String formaterStr, String time) {

String m = formaterTime(formaterStr, time, JAVA_DATE_FORAMTER_3);

int y = Integer.parseInt(m.split("-")[0]);

int pm = Integer.parseInt(m.split("-")[1]) - 1;

String nextMonth = pm + "";

if(pm < 10) {

nextMonth = "0" + pm;

} else {

if(pm == 0) {

y--;

nextMonth = "01";

}

}

return y + "-" + nextMonth;

}

/**

* 得到一个月的第一天日期

* @return 返回的下个月, 格式: yyyy-mm-01

*/

public static String getMonthFirstDay(String formaterStr, String time) {

String m = formaterTime(formaterStr, time, JAVA_DATE_FORAMTER_3);

   return m + "-01";

}

/**

* 得到上一个月份最后一天

* @return 返回的上个月, 格式: yyyy-mm-dd

*/

public static String getPreMonthLastDay(String formaterStr, String time) {

Calendar rightNow = Calendar.getInstance();

rightNow.setTime(str2date(formaterStr, time));

rightNow.set(Calendar.DAY_OF_MONTH, 1); 

rightNow.add(Calendar.DAY_OF_MONTH, -1); 

return date2str(JAVA_DATE_FORAMTER_1, rightNow.getTime());

}

//yyyy-mm-dd hh:mm:ss 转成yyyymmddhhmmss

public static String datechange(String date){

return (date.replaceAll("-", "").replaceAll(":", "").replaceAll(" ", "")).trim();

}

public static void main(String[] args) {

System.out.println(calculateDaysToString(str2date(JAVA_TIME_FORAMTER_2, "2011-03-19 09:30:30"), new Date()));

}

public static String calculateDaysToString(Date date1,Date date2) {

long calculates = date2.getTime() - date1.getTime();

return calculates/(1000 * 60 * 60)+"小时"+(calculates%(1000 * 60 * 60))/(1000 * 60)+"分钟";

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值