import android.content.Context;
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.regex.Pattern;
public class DateUtils {
// 格式:年-月-日 小時(shí):分鐘:秒
public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";
// 格式:年-月-日 小時(shí):分鐘
public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";
// 格式:年月日 小時(shí)分鐘秒
public static final String FORMAT_THREE = "yyyyMMdd-HHmmss";
// 格式:年-月-日
public static final String LONG_DATE_FORMAT = "yyyy-MM-dd";
// 格式:月-日
public static final String SHORT_DATE_FORMAT = "MM-dd";
// 格式:小時(shí):分鐘:秒
public static final String LONG_TIME_FORMAT_SS = "HH:mm:ss";
//格式:小時(shí) :分鐘
public static final String LONG_TIME_FORMAT = "HH:mm";
//格式:年-月
public static final String MONTG_DATE_FORMAT = "yyyy-MM";
// 年的加減
public static final int SUB_YEAR = Calendar.YEAR;
// 月加減
public static final int SUB_MONTH = Calendar.MONTH;
// 天的加減
public static final int SUB_DAY = Calendar.DATE;
// 小時(shí)的加減
public static final int SUB_HOUR = Calendar.HOUR;
// 分鐘的加減
public static final int SUB_MINUTE = Calendar.MINUTE;
// 秒的加減
public static final int SUB_SECOND = Calendar.SECOND;
static final String dayNames[] = {"", "星期日", "星期一", "星期二", "星期三", "星期四",
"星期五", "星期六"};
@SuppressWarnings("unused")
private static final SimpleDateFormat timeFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
public DateUtils() {
}
/**
* 把符合日期格式的字符串轉(zhuǎn)換為日期類型
*
* @param dateStr
* @return
*/
public static java.util.Date stringtoDate(String dateStr, String format) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr);
} catch (Exception e) {
// log.error(e);
d = null;
}
return d;
}
/**
* 把符合日期格式的字符串轉(zhuǎn)換為日期類型
*/
public static java.util.Date stringtoDate(String dateStr, String format,
ParsePosition pos) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr, pos);
} catch (Exception e) {
d = null;
}
return d;
}
/**
* 把日期轉(zhuǎn)換為字符串
*
* @param date
* @return
*/
public static String dateToString(java.util.Date date, String format) {
String result = "";
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
result = formater.format(date);
} catch (Exception e) {
// log.error(e);
}
return result;
}
/**
* 獲取當(dāng)前時(shí)間的指定格式
*
* @param format
* @return
*/
public static String getCurrDate(String format) {
return dateToString(new Date(), format);
}
/**
* @param dateStr
* @param amount
* @return
*/
public static String dateSub(int dateKind, String dateStr, int amount) {
Date date = stringtoDate(dateStr, FORMAT_ONE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateKind, amount);
return dateToString(calendar.getTime(), FORMAT_ONE);
}
/**
* 兩個(gè)日期相減
*
* @param firstTime
* @param secTime
* @return 相減得到的秒數(shù)
*/
public static long timeSub(String firstTime, String secTime) {
long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
long second = stringtoDate(secTime, FORMAT_ONE).getTime();
return (second - first) / 1000;
}
/**
* 獲得某月的天數(shù)
*
* @param year int
* @param month int
* @return int
*/
public static int getDaysOfMonth(String year, String month) {
int days = 0;
if (month.equals("1") || month.equals("3") || month.equals("5")
|| month.equals("7") || month.equals("8") || month.equals("10")
|| month.equals("12")) {
days = 31;
} else if (month.equals("4") || month.equals("6") || month.equals("9")
|| month.equals("11")) {
days = 30;
} else {
if ((Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0)
|| Integer.parseInt(year) % 400 == 0) {
days = 29;
} else {
days = 28;
}
}
return days;
}
/**
* 獲取某年某月的天數(shù)
*
* @param year int
* @param month int 月份[1-12]
* @return int
*/
public static int getDaysOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 獲得當(dāng)前日期
*
* @return int
*/
public static int getToday() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.DATE);
}
/**
* 獲得當(dāng)前月份
*
* @return int
*/
public static int getToMonth() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 獲得當(dāng)前年份
*
* @return int
*/
public static int getToYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
}
/**
* 返回日期的天
*
* @param date Date
* @return int
*/
public static int getDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
}
/**
* 返回日期的年
*
* @param date Date
* @return int
*/
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 返回日期的月份,1-12
*
* @param date Date
* @return int
*/
public static int getMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 計(jì)算兩個(gè)日期相差的天數(shù),如果date2 > date1 返回正數(shù),否則返回負(fù)數(shù)
*
* @param date1 Date
* @param date2 Date
* @return long
*/
public static long dayDiff(Date date1, Date date2) {
return (date2.getTime() - date1.getTime()) / 86400000;
}
/**
* 比較兩個(gè)日期的年差
*
* @param befor
* @param after
* @return
*/
public static int yearDiff(String before, String after) {
Date beforeDay = stringtoDate(before, LONG_DATE_FORMAT);
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(afterDay) - getYear(beforeDay);
}
/**
* 比較指定日期與當(dāng)前日期的差
*
* @param befor
* @param after
* @return
*/
public static int yearDiffCurr(String after) {
Date beforeDay = new Date();
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(beforeDay) - getYear(afterDay);
}
/**
* 比較指定日期與當(dāng)前日期的差
*
* @param before
* @return
* @author chenyz
*/
public static long dayDiffCurr(String before) {
Date currDate = DateUtils.stringtoDate(currDay(), LONG_DATE_FORMAT);
Date beforeDate = stringtoDate(before, LONG_DATE_FORMAT);
return (currDate.getTime() - beforeDate.getTime()) / 86400000;
}
/**
* 獲取每月的第一周
*
* @param year
* @param month
* @return
* @author chenyz
*/
public static int getFirstWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天為第一天
c.set(year, month - 1, 1);
return c.get(Calendar.DAY_OF_WEEK);
}
/**
* 獲取每月的最后一周
*
* @param year
* @param month
* @return
* @author chenyz
*/
public static int getLastWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天為第一天
c.set(year, month - 1, getDaysOfMonth(year, month));
return c.get(Calendar.DAY_OF_WEEK);
}
/**
* 獲得當(dāng)前日期字符串化借,格式"yyyy_MM_dd_HH_mm_ss"
*
* @return
*/
public static String getCurrent() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
StringBuffer sb = new StringBuffer();
sb.append(year).append("_").append(addzero(month, 2))
.append("_").append(addzero(day, 2)).append("_")
.append(addzero(hour, 2)).append("_").append(
addzero(minute, 2)).append("_").append(
addzero(second, 2));
return sb.toString();
}
/**
* 獲得當(dāng)前日期字符串秤涩,格式"yyyy-MM-dd HH:mm:ss"
*
* @return
*/
public static String getNow() {
Calendar today = Calendar.getInstance();
return dateToString(today.getTime(), FORMAT_ONE);
}
/**
* 根據(jù)生日獲取星座
*
* @param birth YYYY-mm-dd
* @return
*/
public static String getAstro(String birth) {
if (!isDate(birth)) {
birth = "2000" + birth;
}
if (!isDate(birth)) {
return "";
}
int month = Integer.parseInt(birth.substring(birth.indexOf("-") + 1,
birth.lastIndexOf("-")));
int day = Integer.parseInt(birth.substring(birth.lastIndexOf("-") + 1));
String s = "魔羯水瓶雙魚(yú)牡羊金牛雙子巨蟹獅子處女天秤天蝎射手魔羯";
int[] arr = {20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22};
int start = month * 2 - (day < arr[month - 1] ? 2 : 0);
return s.substring(start, start + 2) + "座";
}
/**
* 判斷日期是否有效,包括閏年的情況
*
* @param date YYYY-mm-dd
* @return
*/
public static boolean isDate(String date) {
StringBuffer reg = new StringBuffer(
"^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");
reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");
reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");
reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");
reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");
reg.append("1-9])|(1[0-9])|(2[0-8]))))))");
Pattern p = Pattern.compile(reg.toString());
return p.matcher(date).matches();
}
/**
* 取得指定日期過(guò) months 月后的日期 (當(dāng) months 為負(fù)數(shù)表示指定月之前);
*
* @param date 日期 為null時(shí)表示當(dāng)天
* @param month 相加(相減)的月數(shù)
*/
public static Date nextMonth(Date date, int months) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.MONTH, months);
return cal.getTime();
}
/**
* 取得指定日期過(guò) day 天后的日期 (當(dāng) day 為負(fù)數(shù)表示指日期之前);
*
* @param date 日期 為null時(shí)表示當(dāng)天
* @param month 相加(相減)的月數(shù)
*/
public static Date nextDay(Date date, int day) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.DAY_OF_YEAR, day);
return cal.getTime();
}
/**
* 取得距離今天 day 日的日期
*
* @param day
* @param format
* @return
* @author chenyz
*/
public static String nextDay(int day, String format) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, day);
return dateToString(cal.getTime(), format);
}
/**
* 取得指定日期過(guò) day 周后的日期 (當(dāng) day 為負(fù)數(shù)表示指定月之前)
*
* @param date 日期 為null時(shí)表示當(dāng)天
*/
public static Date nextWeek(Date date, int week) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.WEEK_OF_MONTH, week);
return cal.getTime();
}
/**
* 獲取當(dāng)前的日期(yyyy-MM-dd)
*/
public static String currDay() {
return DateUtils.dateToString(new Date(), DateUtils.LONG_DATE_FORMAT);
}
/**
* 獲取昨天的日期
*
* @return
*/
public static String befoDay() {
return befoDay(DateUtils.LONG_DATE_FORMAT);
}
/**
* 根據(jù)時(shí)間類型獲取昨天的日期
*
* @param format
* @return
* @author chenyz
*/
public static String befoDay(String format) {
return DateUtils.dateToString(DateUtils.nextDay(new Date(), -1), format);
}
/**
* 獲取明天的日期
*/
public static String afterDay() {
return DateUtils.dateToString(DateUtils.nextDay(new Date(), 1),
DateUtils.LONG_DATE_FORMAT);
}
/**
* 獲取距離今天day天后的日期
*/
public static String afterDay(int day) {
return DateUtils.dateToString(DateUtils.nextDay(new Date(), day),
DateUtils.LONG_DATE_FORMAT);
}
/**
* 取得當(dāng)前時(shí)間距離1900/1/1的天數(shù)
*
* @return
*/
public static int getDayNum() {
int daynum = 0;
GregorianCalendar gd = new GregorianCalendar();
Date dt = gd.getTime();
GregorianCalendar gd1 = new GregorianCalendar(1900, 1, 1);
Date dt1 = gd1.getTime();
daynum = (int) ((dt.getTime() - dt1.getTime()) / (24 * 60 * 60 * 1000));
return daynum;
}
/**
* getDayNum的逆方法(用于處理Excel取出的日期格式數(shù)據(jù)等)
*
* @param day
* @return
*/
public static Date getDateByNum(int day) {
GregorianCalendar gd = new GregorianCalendar(1900, 1, 1);
Date date = gd.getTime();
date = nextDay(date, day);
return date;
}
/**
* 針對(duì)yyyy-MM-dd HH:mm:ss格式,顯示yyyymmdd
*/
public static String getYmdDateCN(String datestr) {
if (datestr == null)
return "";
if (datestr.length() < 10)
return "";
StringBuffer buf = new StringBuffer();
buf.append(datestr.substring(0, 4)).append(datestr.substring(5, 7))
.append(datestr.substring(8, 10));
return buf.toString();
}
/**
* 獲取本月第一天
*
* @param format
* @return
*/
public static String getFirstDayOfMonth(String format) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
return dateToString(cal.getTime(), format);
}
/**
* 獲取本月最后一天
*
* @param format
* @return
*/
public static String getLastDayOfMonth(String format) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DATE, -1);
return dateToString(cal.getTime(), format);
}
/**
* 將元數(shù)據(jù)前補(bǔ)零帜乞,補(bǔ)后的總長(zhǎng)度為指定的長(zhǎng)度,以字符串的形式返回
*
* @param sourceDate
* @param formatLength
* @return 重組后的數(shù)據(jù)
*/
public static String addzero(int sourceDate, int formatLength) {
/*
* 0 指前面補(bǔ)充零
* formatLength 字符總長(zhǎng)度為 formatLength
* d 代表為正數(shù)筐眷。
*/
String newString = String.format("%0" + formatLength + "d", sourceDate);
return newString;
}
/**
* 獲取當(dāng)前是星期幾
*
* @return 星期幾
*/
public static String getWeek() {
Calendar cal = Calendar.getInstance();
return dayNames[cal.get(Calendar.DAY_OF_WEEK)];
}
/**
* 根據(jù)十二小時(shí)制或者二十四小時(shí)制得到時(shí)間
*
* @return 時(shí)間
*/
public static String getCurrentTimeBy12_24(Context context) {
if (android.text.format.DateFormat.is24HourFormat(context)) {
return getCurrDate(LONG_TIME_FORMAT);
} else {
StringBuilder sb = new StringBuilder();
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int minute = Calendar.getInstance().get(Calendar.MINUTE);
if (hour >= 12) {
sb.append(hour - 12).append(":").append(minute).append(" PM");
} else {
sb.append(hour).append(":").append(minute).append(" AM");
}
return sb.toString();
}
}
/**
* 時(shí)間戳轉(zhuǎn)時(shí)間
*
* @param time 時(shí)間戳
* @return 時(shí)間
*/
public static String TimeAndDate(Long time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String d = sdf.format(new Date(time));
return d;
}
/**
* 轉(zhuǎn)換任意時(shí)間格式
*
* @param date 日期+時(shí)間
* @param format 時(shí)間格式--例:yyyy-MM-dd
* @return
*/
public static String getDate(String date, String format) {
String re_time = null;
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat(format);
Date d;
try {
d = sdf1.parse(date);
re_time = sdf2.format(d);
} catch (ParseException e) {
e.printStackTrace();
}
return re_time;
}
}
Android常用工具類 ---- DateUtils
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門梳庆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)暖途,“玉大人卑惜,你說(shuō)我怎么就攤上這事∽な郏” “怎么了露久?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)欺栗。 經(jīng)常有香客問(wèn)我毫痕,道長(zhǎng),這世上最難降的妖魔是什么迟几? 我笑而不...
- 正文 為了忘掉前任消请,我火速辦了婚禮,結(jié)果婚禮上类腮,老公的妹妹穿的比我還像新娘臊泰。我一直安慰自己,他們只是感情好蚜枢,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布缸逃。 她就那樣靜靜地躺著,像睡著了一般厂抽。 火紅的嫁衣襯著肌膚如雪需频。 梳的紋絲不亂的頭發(fā)上,一...
- 那天筷凤,我揣著相機(jī)與錄音昭殉,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挪丢,可吹牛的內(nèi)容都是我干的莽鸭。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼吃靠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼硫眨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起巢块,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤礁阁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后族奢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體姥闭,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年越走,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚品。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站肋殴,受9級(jí)特大地震影響囤锉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜护锤,卻給世界環(huán)境...
- 文/蒙蒙 一官地、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烙懦,春花似錦驱入、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至魄鸦,卻和暖如春宴杀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拾因。 一陣腳步聲響...
- 正文 我出身青樓扁达,卻偏偏與公主長(zhǎng)得像正卧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跪解,可洞房花燭夜當(dāng)晚...