Java 之 Date 和 Calendar 实例
[java] view plaincopyprint?
package com.homer.learn;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TimeTest {
public static void main(String[] args) {
TimeTest tt = new TimeTest();
System.out.println("\n当前日期: ");
System.out.println(tt.getNowTime()); // 获取当前时间
System.out.println(tt.getNowTime2()); // 获取当前时间
System.out.println(tt.getNowTime3()); // 获取当前时间
System.out.println("\n计算周: ");
System.out.println(tt.getDaysOfNow2SundayInWeek()); // 获取当前日期与本周日的相差天数
System.out.println(tt.getDateOfMondayInWeek()); // 获取本周一的日期
System.out.println(tt.getDateOfSaturdayInWeek()); // 获取本周六的日期
System.out.println(tt.getDateOfSaturdayInNextWeek()); // 获取下周一的日期
System.out.println(tt.getDateOfSaturdayInLastWeek()); // 获取上周一的日期
System.out.println("\n计算月: ");
System.out.println(tt.getFirstDayOfMonth()); // 获取当月的第一天
System.out.println(tt.getLastDayOfMonth()); // 获取当月最后一天
System.out.println(tt.getFirstDayOfPreviousMonth()); // 获取上月第一天
System.out.println(tt.getLastDayOfPreviousMonth()); // 获取上月最后一天
System.out.println(tt.getFirstDayOfNextMonth()); // 获取下月第一天
System.out.println(tt.getLastDayOfNextMonth()); // 获取下月最后一天
System.out.println("\n计算年: ");
System.out.println(tt.getFirstDayOfYear()); // 获取本年的第一天
System.out.println(tt.getLastDayOfYear()); // 获取本年最后一天
System.out.println(tt.getFirstDayOfPreviousYear()); // 获取上年的第一天
System.out.println(tt.getLastDayOfPreviousYear()); // 获取上年最后一天
System.out.println(tt.getFirstDayOfNextYear()); // 获取下年的第一天
System.out.println(tt.getLastDayOfNextYear()); // 获取下年最后一天
System.out.println(tt.getDaysOfYear()); // 获取本年的天数
System.out.println("\n计算季度: ");
System.out.println(tt.getSeasonOfMonth()); // 获取当前月的季度
System.out.println(tt.getLastDayOfNow()); // 获取当前天所在月份的天数
System.out.println(tt.isLeapYear(2012)); // 判断是否是润年
System.out.println("\n日期格式转换与计算: ");
System.out.println(tt.getDateFromStr("2012-06-20")); // 将字符串时间格式 yyyy-MM-dd,转换成Date类型
System.out.println(tt.getWeek("2012-06-20")); // 根据一个日期,返回是星期几的字符串
System.out.print("2012-06-02 -> 2012-06-12间隔天数:"); // 计算两个日期间的间隔天数
System.out.println(tt.getDaysFromTwoDate("2012-06-02", "2012-06-12"));
}
// 获取当前时间
public String getNowTime() {
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date now = new Date();
return sDateFormat.format(now);
}
public String getNowTime2() {
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date(System.currentTimeMillis());
return sDateFormat.format(now);
}
public String getNowTime3() {
StringBuilder strBuildNow = new StringBuilder();
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millissecond = calendar.get(Calendar.MILLISECOND);
strBuildNow.append(year + "-");
strBuildNow.append(month + "-");
strBuildNow.append(day + " ");
strBuildNow.append(hour + ":");
strBuildNow.append(minute + ":");
strBuildNow.append(second + ".");
strBuildNow.append(millissecond);
return strBuildNow.toString();
}
// 获取当前日期与本周日的相差天数
public int getDaysOfNow2SundayInWeek() {
Calendar calendar = Calendar.getInstance();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 减一天,周一为1,符合中国人习惯。Sunday - 1; Monday - 2; Saturday - 7
if(dayOfWeek == 0) { // 周日
return 0;
} else {
return 0 - dayOfWeek;
}
}
// 获取本周一的日期
public String getDateOfMondayInWeek(){
int day = this.getDaysOfNow2SundayInWeek() + 1; // 加1,即周一离本周日的间隔天数
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.add(GregorianCalendar.DATE, day); // 计算与本周一相差的时间间隔
Date curDay = gCalendar.getTime();
DateFormat dateFormat = DateFormat.getInstance();
String dateOfMonday = dateFormat.format(curDay);
return dateOfMonday;
}
// 获取本周六的日期
public String getDateOfSaturdayInWeek(){
int day = this.getDaysOfNow2SundayInWeek() + 6; // 加6,即周六离本周日的间隔天数
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.add(GregorianCalendar.DATE, day); // 计算与本周六相差的时间间隔
Date curDay = gCalendar.getTime();
DateFormat dateFormat = DateFormat.getInstance();
String dateOfMonday = dateFormat.format(curDay);
return dateOfMonday;
}
// 获取上周一的日期
public String getDateOfSaturdayInLastWeek(){
int day = this.getDaysOfNow2SundayInWeek() - 1; // 减1,即上周一离本周日的间隔天数
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.add(GregorianCalendar.DATE, day); // 计算与上周一相差的时间间隔
Date curDay = gCalendar.getTime();
DateFormat dateFormat = DateFormat.getInstance();
String dateOfMonday = dateFormat.format(curDay);
return dateOfMonday;
}
// 获取下周一的日期
public String getDateOfSaturdayInNextWeek(){
int day = this.getDaysOfNow2SundayInWeek() + 8; // 加8,即下周一离本周日的间隔天数
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.add(GregorianCalendar.DATE, day); // 计算与下周一相差的时间间隔
Date curDay = gCalendar.getTime();
DateFormat dateFormat = DateFormat.getInstance();
String dateOfMonday = dateFormat.format(curDay);
return dateOfMonday;
}
// 获取当月第一天
public String getFirstDayOfMonth() {
String strFirstDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
strFirstDay = sDateFormat.format(calendar.getTime());
return strFirstDay;
}
// 获取当月最后一天
public String getLastDayOfMonth() {
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
calendar.add(Calendar.MONDAY, 1); // 加一个月,变为下月的1号
calendar.add(Calendar.DATE, -1); // 减去一天,变为当前月的最后一天
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
// 获取上月第一天
public String getFirstDayOfPreviousMonth() {
String strFirstDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
calendar.add(Calendar.MONDAY, -1); // 减一个月,变为上月的1号
strFirstDay = sDateFormat.format(calendar.getTime());
return strFirstDay;
}
// 获取上月最后一天
public String getLastDayOfPreviousMonth() {
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
calendar.add(Calendar.DATE, -1); // 减一天,变为上月的1号
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
public String getLastDayOfPreviousMonth2() {
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONDAY, -1); // 减一个月
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
calendar.roll(Calendar.DATE, -1); // 把日期回滚一天,也就是本月最后一天
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
// 获取下月第一天
public String getFirstDayOfNextMonth() {
String strFirstDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1); // 加一个月
calendar.set(Calendar.DATE, 1); // 设置当前月第一天
strFirstDay = sDateFormat.format(calendar.getTime());
return strFirstDay;
}
// 获取下月最后一天
public String getLastDayOfNextMonth() {
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1); // 设置当前月的1号
calendar.add(Calendar.MONDAY, 2); // 加两个月,变为下下月的1号
calendar.add(Calendar.DATE, -1); // 减一天,变为下月的最后一天
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
public String getLastDayOfNextMonth2(){
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1); // 加1个月
calendar.set(Calendar.DATE, 1); // 把日期设置为当月第1天
calendar.roll(Calendar.DATE, -1); // 日期回滚1天,也就是本月最后1天
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
// 获取本年的第一天
public String getFirstDayOfYear(){
String strFirstDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, 1); // 设置当年第一天
strFirstDay = sDateFormat.format(calendar.getTime());
return strFirstDay;
}
// 获取本年的最后一天
public String getLastDayOfYear(){
String strLastDay = "";
Calendar calendar = Calendar.getInstance();
strLastDay = calendar.get(Calendar.YEAR) + "-12-31";
return strLastDay;
}
// 获取上年的第一天
public String getFirstDayOfPreviousYear(){
String strFirstDay = "";
Calendar calendar = Calendar.getInstance();
strFirstDay = (calendar.get(Calendar.YEAR) - 1) + "-01-01";
return strFirstDay;
}
// 获取上年的最后一天
public String getLastDayOfPreviousYear(){
String strLastDay = "";
Calendar calendar = Calendar.getInstance();
strLastDay = (calendar.get(Calendar.YEAR) - 1) + "-12-31";
return strLastDay;
}
// 获取下年的第一天
public String getFirstDayOfNextYear(){
String strFirstDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 1); // 加一年
calendar.set(Calendar.DAY_OF_YEAR, 1); // 设置当年第一天
strFirstDay = sDateFormat.format(calendar.getTime());
return strFirstDay;
}
// 获取下年的最后一天
public String getLastDayOfNextYear(){
String strLastDay = "";
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 1); // 加一年
calendar.set(Calendar.DAY_OF_YEAR, 1); // 设置当年第一天
calendar.roll(Calendar.DAY_OF_YEAR, -1); // 回滚到当年最后一天
strLastDay = sDateFormat.format(calendar.getTime());
return strLastDay;
}
// 获取本年的天数
public String getDaysOfYear(){
int year = 0;
int days = 0;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, 1); // 设置日期为当年第一天
calendar.roll(Calendar.DAY_OF_YEAR, -1); // 把日期回滚一天
year = calendar.get(Calendar.YEAR);
days = calendar.get(Calendar.DAY_OF_YEAR);
return (days + " in " + year);
}
// 获取当前月的季度
public String getSeasonOfMonth(){
String strSeason = "";
int year, month, day;
int season = 1;
int array[][] = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} };
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONDAY) + 1;
day = calendar.get(Calendar.DAY_OF_MONTH);
switch (month) {
case 1:
case 2:
case 3:
season = 1;
break;
case 4:
case 5:
case 6:
season = 2;
break;
case 7:
case 8:
case 9:
season = 3;
break;
case 10:
case 11:
case 12:
season = 4;
break;
default:
season = 1;
break;
}
int start_month = array[season-1][0];
int end_month = array[season-1][2];
strSeason = year + "-" + month + "-" +day;
strSeason += " in [ " + year + "-" + start_month + " : " + year + "-" + end_month + " ]";
return strSeason;
}
// 获取当前天所在月份的天数
public String getLastDayOfNow(){
String strLastDay = "";
int year, month, day;
int days = 0;
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
day = calendar.get(Calendar.DAY_OF_MONTH);
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (isLeapYear(year)) {
days = 29;
} else {
days = 28;
}
break;
default:
days = 0;
break;
}
strLastDay = days + " in [ " + year + "-" + month + "-" + day + " ]";
return strLastDay;
}
// 判断是否是润年
public boolean isLeapYear(int year){
return (year%4 == 0 && year%100 != 0) || (year%400 == 0);
}
// 将字符串时间格式 yyyy-MM-dd,转换成Date类型
public Date getDateFromStr(String txtDate) {
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date date = sDateFormat.parse(txtDate, pos);
return date;
}
// 根据一个日期,返回是星期几的字符串
public String getWeek(String txtDate) {
Date date = getDateFromStr(txtDate);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
String week = new SimpleDateFormat("EEEE").format(date);
return week;
}
// 计算两个日期间的间隔天数
public long getDaysFromTwoDate(String txtDate1, String txtDate2) {
if(txtDate1 == null || txtDate1.equals("")) {
return 0;
}
if(txtDate2 == null || txtDate2.equals("")) {
return 0;
}
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
long days = 0;
try {
Date date1 = sDateFormat.parse(txtDate1);
Date date2 = sDateFormat.parse(txtDate2);
days = (date2.getTime() - date1.getTime())/(24*60*60*1000); // 通过getTime()方法,把时间Date转换成毫秒格式Long类型,进行计算
} catch (Exception e) {
System.out.println(e.getMessage());
}
return days;
}
}
运行结果:
当前日期:
2012-03-07
2012-03-07 12:30:11
2012-3-7 12:30:11.101
计算周:
-3
3/5/12 12:30 PM
3/10/12 12:30 PM
3/12/12 12:30 PM
3/3/12 12:30 PM
计算月:
2012-03-01
2012-03-31
2012-02-01
2012-02-29
2012-04-01
2012-04-30
计算年:
2012-01-01
2012-12-31
2011-01-01
2011-12-31
2013-01-01
2013-12-31
366 in 2012
计算季度:
2012-3-7 in [ 2012-1 : 2012-3 ]
31 in [ 2012-3-7 ]
true
日期格式转换与计算:
Wed Jun 20 00:00:00 CST 2012
Wednesday
2012-06-02 -> 2012-06-12间隔天数:10