Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象。

创建一个日期对象

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数,这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。

import java.util.Date;  

public class DateTest {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); // Fri Mar 02 22:38:41 CST 2012
System.out.println(date.getTime()); // 1330699121772
}
}

在星期五,2012年3月2日,下午大约是22:38:41的样子,上面的例子在系统输出设备上显示的结果是 1330699121772。值得注意的是我们使用了Date 构造函数创建一个日期对象,这个构造函数没有接受任何参数,而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期。现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了。我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了。

日期数据的定制格式

假如我们希望定制日期数据的格式,比方星期五-3月-02日-2012年. 下面的例子展示了如何完成这个工作:

import java.text.SimpleDateFormat;
import java.util.Date; public class DateTest {
public static void main(String[] args) {
Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
System.out.println(dateFormat.format(date)); // Friday-March-02-2012
}
}

只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy",我们就能够指明自己想要的格式。格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分。EEEE是星期,MMMM是月,dd是日,yyyy是年,字符的个数决定了日期是如何格式化的。传递"EE-MM-dd-yy"会显示Friday-March-02-2012。

将文本数据解析成日期对象

假设我们有一个文本字符串包含了一个格式化了的日期对象,我们希望解析这个字符串并从文本日期数据创建一个日期对象。我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类。但是这一次,我们使用格式化解析而不是生成一个文本日期数据。我们的例子显示在下面,将解析文本字符串"3-02-2012"并创建一个值为1330617600000 的日期对象。

import java.text.SimpleDateFormat;
import java.util.Date; public class DateTest {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
String txtDate = "3-02-2012"; try {
Date date = dateFormat.parse(txtDate);
System.out.println(date.getTime()); //
System.out.println(dateFormat.format(date)); // 03-02-2012
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

使用标准的日期格式化过程

既然我们已经可以生成和解析定制的日期格式了,让我们来看一看如何使用内建的格式化过程。方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程。下面是我们获取了六个内建的日期格式化过程。它们包括一个空,默认,短的,中等的,长的,完整的日期格式。

import java.text.DateFormat;
import java.util.Date; public class DateTest {
public static void main(String[] args) {
String strDate = null; Date date = new Date();
System.out.println(date); // Fri Mar 02 21:43:55 CST 2012 strDate = DateFormat.getDateInstance().format(date);
System.out.println(strDate); // Mar 2, 2012 // Date
strDate = DateFormat.getDateInstance(DateFormat.DEFAULT).format(date);
System.out.println(strDate); // Mar 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.SHORT).format(date);
System.out.println(strDate); // 3/2/12 strDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(date);
System.out.println(strDate); // Mar 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.LONG).format(date);
System.out.println(strDate); // March 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.FULL).format(date);
System.out.println(strDate); // Friday, March 2, 2012 // DateTime
strDate = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT).format(date);
System.out.println(strDate); // Mar 2, 2012 11:06:36 PM strDate = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date);
System.out.println(strDate); // 3/2/12 11:06 PM strDate = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date);
System.out.println(strDate); // Mar 2, 2012 11:06:36 PM strDate = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date);
System.out.println(strDate); // March 2, 2012 11:06:36 PM CST strDate = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(date);
System.out.println(strDate); // Friday, March 2, 2012 11:06:36 PM CST
}
}

运行结果: 
Fri Mar 02 23:06:36 CST 2012
Mar 2, 2012
Mar 2, 2012 11:06:36 PM
3/2/12 11:06 PM
Mar 2, 2012 11:06:36 PM
March 2, 2012 11:06:36 PM CST
Friday, March 2, 2012 11:06:36 PM CST
Mar 2, 2012
3/2/12
Mar 2, 2012
March 2, 2012
Friday, March 2, 2012

注意我们在对 getDateTimeInstance的每次调用中都传递了两个值:第一个参数是日期风格,而第二个参数是时间风格。它们都是基本数据类型int(整型)。考虑到可读性,我们使用了DateFormat 类提供的常量: DEFAULT,SHORT,MEDIUM,LONG, FULL。

Calendar 类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

假设你想要设置,获取,操纵一个日期对象的各个部分,比方一个月的一天或者是一个星期的一天,为了演示这个过程,我们将使用具体的子类 java.util.GregorianCalendar。 考虑下面的例子,它计算得到下面的第十个星期五是13号。

import java.text.DateFormat;
import java.util.Date;
import java.util.GregorianCalendar; public class CalendarTest {
public static void main(String[] args) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(date);
System.out.println("System Date: " + calendar.getTime()); calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
System.out.println("Day of Week to Friday: \n" + dateFormat.format(calendar.getTime())); int friday13Counter = 0;
while(friday13Counter <= 10) {
calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
if(calendar.get(GregorianCalendar.DAY_OF_MONTH) == 13) {
friday13Counter++;
System.out.println(dateFormat.format(calendar.getTime()));
}
}
}
}

运行结果:

System Date: Fri Mar 02 23:37:01 CST 2012
Day of Week to Friday: 
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017

在这个例子中我们作了有趣的函数调用:

  calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY) 和 calendar.add(GregorianCalendar.DAY_OF_MONTH, 7)

set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五。注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性。

add 方法让我们能够在日期上加上数值,润年的所有复杂的计算都由这个方法自动处理。

我们这个例子的输出结果是: 
System Date: Fri Mar 02 23:33:19 CST 2012

当我们将它设置成星期五以后就成了:

Day of Week to Friday: 
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017

时间掌握在你的手里

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

Java Date 和 Calendar的更多相关文章

  1. Java Date and Calendar examples

    Java Date and Calendar examples This tutorial shows you how to work with java.util.Date and java.uti ...

  2. Java:Date、Calendar、Timestamp的使用

    一.Java.util.Date 该对象包含了年月日时分秒信息.具体使用如下代码: //String 转换为Date private static void dateDemo() throws Par ...

  3. Java 时间类-Calendar、Date、LocalDate/LocalTime

    1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...

  4. Java日期与时间的处理/Date,String,Calendar转换

    public class Demo01 { //Java中Date类和Calendar简介 public static void main(String[] args) { long now=Syst ...

  5. java日期类型转换总结date timestamp calendar string

    用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式.         Timestamp转化为String: S ...

  6. Java:Date、Calendar、Timestamp的区别、相互转换与使用【转载】

    1 Java.util.Date 包含年.月.日.时.分.秒信息 包含年.月.日信息. 继承自java.util.Date.在数据库相关操作中使用,如rs.getDate,ps.setDate等.rs ...

  7. java日期处理 calendar 和date

    抄的人家的,仅作学习使用. java Date获取 年月日时分秒     package com.util;   import java.text.DateFormat; import java.ut ...

  8. Java:日期类Date与Calendar

    Timestamp类型与日期类型之间的转化? Timestamp timestamp = Timestamp.valueOf("2017-03-17 07:00:00"); Dat ...

  9. JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算

    JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习 ...

随机推荐

  1. DataTable去除重复行

    //抽取dt中的特定列"Region","Cur","Year"组合成新的dat DataTable dat = dt.DefaultVie ...

  2. iOS中点击背景收键盘

    这一次给大家带来的是ios中点击背景如何收键盘(感觉不错给个赞

  3. JDK源码学习--String篇(三) 存储篇

    在进一步解读String类时,先了解下内存分配和数据存储的. 数据存储 1.寄存器:最快的存储区,位于处理器的内部.由于寄存器的数量有限,所以寄存器是按需分配. 2.堆栈:位于RAM中,但是通过堆栈指 ...

  4. VC++学习之GDI概述

    VC++学习之GDI概述 图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏 ...

  5. SQL Server 数据岸问题

    create table t2(x int constraint pk_t2 primary key);go insert into t2(x) values(1),(2),(3),(5),(7),( ...

  6. Android中自定义属性的使用

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  7. 常用CSS HACK

    常用CSS HACK IE6 3像素bug和双边距bug一样的经典 现象: IE6下浮动元素和不浮动元素之间会有3px间隙(3px bug,div.float-left + div.float-non ...

  8. 64位WINDOWS系统环境下应用软件开发的兼容性问题(CPU 注册表 目录)

    应用软件开发的64 位WINDOWS 系统环境兼容性 1. 64 位CPU 硬件 目前的64位CPU分为两类:x64和IA64.x64的全称是x86-64,从名字上也可以看出来它和 x86是兼容的,原 ...

  9. cocos2dx 字体BMFont,Atlas

    为了更加个性化,系统提供的字体,有时候没法满足我们的要求,所以cocos2dx提供了自定义字体控件. 分别是CCLabelBMFont和CCLabelAtlas,先看BMFont的效果 CCLabel ...

  10. [Docker]初次接触

    Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...