📄 dateutil.java
字号:
/*
* @(#) 所有版权归聚灵工作室所有.
*
* $Id$
*
* ===================================
* Electric Operation Maintenance System(EOMS)
*
* Copyright (c) 2006 by INSPUR LG, Inc.
* All rights reserved.
*/
package com.work.util;
import java.io.Serializable;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
/**
* 日期操作工具类,主要实现了日期的常用操作。
* <p>
* 在工具类中经常使用到工具类的格式化描述,这个主要是一个日期的操作类,所以日志格式主要使用 SimpleDateFormat的定义格式.
* <p>
* 格式的意义如下: 日期和时间模式 <br>
* 日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z'
* 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''"
* 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。
* <p>
* 定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留): <br>
* <table>
* <tr>
* <td>字母</td>
* <td>日期或时间元素</td>
* <td>表示</td>
* <td>示例</td>
* <td></tr>
* <tr>
* <td>G</td>
* <td>Era</td>
* <td>标志符</td>
* <td>Text</td>
* <td>AD</td>
* <td></tr>
* <tr>
* <td>y</td>
* <td>年</td>
* <td>Year</td>
* <td>1996;</td>
* <td>96</td>
* <td></tr>
* <tr>
* <td>M</td>
* <td>年中的月份</td>
* <td>Month</td>
* <td>July;</td>
* <td>Jul;</td>
* <td>07</tr>
* <tr>
* <td>w</td>
* <td>年中的周数</td>
* <td>Number</td>
* <td>27</td>
* <td></tr>
* <tr>
* <td>W</td>
* <td>月份中的周数</td>
* <td>Number</td>
* <td>2</td>
* <td></tr>
* <tr>
* <td>D</td>
* <td>年中的天数</td>
* <td>Number</td>
* <td>189</td>
* <td></tr>
* <tr>
* <td>d</td>
* <td>月份中的天数</td>
* <td>Number</td>
* <td>10</td>
* <td></tr>
* <tr>
* <td>F</td>
* <td>月份中的星期</td>
* <td>Number</td>
* <td>2</td>
* <td></tr>
* <tr>
* <td>E</td>
* <td>星期中的天数</td>
* <td>Text</td>
* <td>Tuesday;</td>
* <td>Tue</tr>
* <tr>
* <td>a</td>
* <td>Am/pm</td>
* <td>标记</td>
* <td>Text</td>
* <td>PM</td>
* <td></tr>
* <tr>
* <td>H</td>
* <td>一天中的小时数(0-23)</td>
* <td>Number</td>
* <td>0</tr>
* <tr>
* <td>k</td>
* <td>一天中的小时数(1-24)</td>
* <td>Number</td>
* <td>24</td>
* <td></tr>
* <tr>
* <td>K</td>
* <td>am/pm</td>
* <td>中的小时数(0-11)</td>
* <td>Number</td>
* <td>0</td>
* <td></tr>
* <tr>
* <td>h</td>
* <td>am/pm</td>
* <td>中的小时数(1-12)</td>
* <td>Number</td>
* <td>12</td>
* <td></tr>
* <tr>
* <td>m</td>
* <td>小时中的分钟数</td>
* <td>Number</td>
* <td>30</td>
* <td></tr>
* <tr>
* <td>s</td>
* <td>分钟中的秒数</td>
* <td>Number</td>
* <td>55</td>
* <td></tr>
* <tr>
* <td>S</td>
* <td>毫秒数</td>
* <td>Number</td>
* <td>978</td>
* <td></tr>
* <tr>
* <td>z</td>
* <td>时区</td>
* <td>General</td>
* <td>time</td>
* <td>zone</td>
* <td>Pacific</td>
* <td>Standard</td>
* <td>Time;</td>
* <td>PST;</td>
* <td>GMT-08:00</tr>
* <tr>
* <td>Z</td>
* <td>时区</td>
* <td>RFC</td>
* <td>822</td>
* <td>time</td>
* <td>zone</td>
* <td>-0800</td>
* <td></tr>
* </table>
*
* 模式字母通常是重复的,其数量确定其精确表示:
*
*/
public final class DateUtil implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3098985139095632110L;
private DateUtil() {
}
/**
* 格式化日期显示格式yyyy-MM-dd
*
* @param sdate
* 原始日期格式
* @return yyyy-MM-dd格式化后的日期显示
*/
public static String dateFormat(String sdate) {
return dateFormat(sdate, "yyyy-MM-dd");
}
/**
* 格式化日期显示格式
*
* @param sdate
* 原始日期格式
* @param format
* 格式化后日期格式
* @return 格式化后的日期显示
*/
public static String dateFormat(String sdate, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
java.sql.Date date = java.sql.Date.valueOf(sdate);
String dateString = formatter.format(date);
return dateString;
}
/**
* 求两个日期相差天数
*
* @param sd
* 起始日期,格式yyyy-MM-dd
* @param ed
* 终止日期,格式yyyy-MM-dd
* @return 两个日期相差天数
*/
public static long getIntervalDays(String sd, String ed) {
return ((java.sql.Date.valueOf(ed)).getTime() - (java.sql.Date
.valueOf(sd)).getTime())
/ (3600 * 24 * 1000);
}
/**
* 起始年月yyyy-MM与终止月yyyy-MM之间跨度的月数
*
* @return int
*/
public static int getInterval(String beginMonth, String endMonth) {
int intBeginYear = Integer.parseInt(beginMonth.substring(0, 4));
int intBeginMonth = Integer.parseInt(beginMonth.substring(beginMonth
.indexOf("-") + 1));
int intEndYear = Integer.parseInt(endMonth.substring(0, 4));
int intEndMonth = Integer.parseInt(endMonth.substring(endMonth
.indexOf("-") + 1));
return ((intEndYear - intBeginYear) * 12)
+ (intEndMonth - intBeginMonth) + 1;
}
public static Date getDate(String sDate, String dateFormat) {
SimpleDateFormat fmt = new SimpleDateFormat(dateFormat);
ParsePosition pos = new ParsePosition(0);
return fmt.parse(sDate, pos);
}
/**
* 取得当前日期的年份,以yyyy格式返回.
*
* @return 当年 yyyy
*/
public static String getCurrentYear() {
return getFormatCurrentTime("yyyy");
}
/**
* 自动返回上一年。例如当前年份是2007年,那么就自动返回2006
*
* @return 返回结果的格式为 yyyy
*/
public static String getBeforeYear() {
String currentYear = getFormatCurrentTime("yyyy");
int beforeYear = Integer.parseInt(currentYear) - 1;
return "" + beforeYear;
}
/**
* 取得当前日期的月份,以MM格式返回.
*
* @return 当前月份 MM
*/
public static String getCurrentMonth() {
return getFormatCurrentTime("MM");
}
/**
* 取得当前日期的天数,以格式"dd"返回.
*
* @return 当前月中的某天dd
*/
public static String getCurrentDay() {
return getFormatCurrentTime("dd");
}
/**
* 返回当前时间字符串。
* <p>
* 格式:yyyy-MM-dd
*
* @return String 指定格式的日期字符串.
*/
public static String getCurrentDate() {
return getFormatDateTime(new Date(), "yyyy-MM-dd");
}
/**
* 返回给定时间字符串。
* <p>
* 格式:yyyy-MM-dd
*
* @param date
* 日期
* @return String 指定格式的日期字符串.
*/
public static String getFormatDate(Date date) {
return getFormatDateTime(date, "yyyy-MM-dd");
}
/**
* 根据制定的格式,返回日期字符串。例如2007-05-05
*
* @param format
* "yyyy-MM-dd" 或者 "yyyy/MM/dd"
* @return 指定格式的日期字符串。
*/
public static String getFormatDate(String format) {
return getFormatDateTime(new Date(), format);
}
/**
* 返回当前时间字符串。
* <p>
* 格式:yyyy-MM-dd HH:mm:ss
*
* @return String 指定格式的日期字符串.
*/
public static String getCurrentTime() {
return getFormatDateTime(new Date(), "yyyy-MM-dd HH:mm:ss");
}
/**
* 返回给定时间字符串。
* <p>
* 格式:yyyy-MM-dd HH:mm:ss
*
* @param date
* 日期
* @return String 指定格式的日期字符串.
*/
public static String getFormatTime(Date date) {
return getFormatDateTime(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 根据给定的格式,返回时间字符串。
* <p>
* 格式参照类描绘中说明.
*
* @param format
* 日期格式字符串
* @return String 指定格式的日期字符串.
*/
public static String getFormatCurrentTime(String format) {
return getFormatDateTime(new Date(), format);
}
/**
* 根据给定的格式与时间(Date类型的),返回时间字符串<br>
*
* @param date
* 指定的日期
* @param format
* 日期格式字符串
* @return String 指定格式的日期字符串.
*/
public static String getFormatDateTime(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 取得指定年月日的日期对象.
*
* @param year
* 年
* @param month
* 月注意是从1到12
* @param day
* 日
* @return 一个java.util.Date()类型的对象
*/
public static Date getDateObj(int year, int month, int day) {
Calendar c = new GregorianCalendar();
c.set(year, month - 1, day);
return c.getTime();
}
/**
* 取得指定分隔符分割的年月日的日期对象.
*
* @param args
* 格式为"yyyy-MM-dd"
* @param split
* 时间格式的间隔符,例如“-”,“/”
* @return 一个java.util.Date()类型的对象
*/
public static Date getDateObj(String args, String split) {
String[] temp = args.split(split);
int year = new Integer(temp[0]).intValue();
int month = new Integer(temp[1]).intValue();
int day = new Integer(temp[2]).intValue();
return getDateObj(year, month, day);
}
/**
* 取得给定字符串描述的日期对象,描述模式采用pattern指定的格式.
*
* @param dateStr
* 日期描述
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -