calendar类提供了获取某一月份天数的方法,直接调用即可。
package test;
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
public class Airliner{
public static void main(String args[]){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = CalendargetInstance();
calendarsetTime(sdfparse("2015-02-01"));
Systemoutprintln(calendargetActualMaximum(CalendarDAY_OF_MONTH));
} catch (ParseException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。
调用方式:
代码如下 复制代码
long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
Systemoutprintln(day);
具体实现方法调用:
代码如下 复制代码
/
计算出两个日期之间相差的天数
建议date1 大于 date2 这样计算的值为正数
@param date1 日期1
@param date2 日期2
@return date1 - date2
/
public static int dateInterval(long date1, long date2) {
if(date2 > date1){
date2 = date2 + date1;
date1 = date2 - date1;
date2 = date2 - date1;
}
// Canlendar 该类是一个抽象类
// 提供了丰富的日历字段
// 本程序中使用到了
// CalendarYEAR 日期中的年份
// CalendarDAY_OF_YEAR 当前年中的天数
// getActualMaximum(CalendarDAY_OF_YEAR) 返回今年是 365 天还是366天
Calendar calendar1 = CalendargetInstance(); // 获得一个日历
calendar1setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。
Calendar calendar2 = CalendargetInstance();
calendar2setTimeInMillis(date2);
// 先判断是否同年
int y1 = calendar1get(CalendarYEAR);
int y2 = calendar2get(CalendarYEAR);
int d1 = calendar1get(CalendarDAY_OF_YEAR);
int d2 = calendar2get(CalendarDAY_OF_YEAR);
int maxDays = 0;
int day = 0;
if(y1 - y2 > 0){
day = numerical(maxDays, d1, d2, y1, y2, calendar2);
}else{
day = d1 - d2;
}
return day;
}
/
日期间隔计算
计算公式(示例):
20121201- 20121212
取出20121201这一年过了多少天 d1 = 天数 取出20121212这一年过了多少天 d2 = 天数
如果2012年这一年有366天就要让间隔的天数+1,因为2月份有29日。
@param maxDays 用于记录一年中有365天还是366天
@param d1 表示在这年中过了多少天
@param d2 表示在这年中过了多少天
@param y1 当前为2012年
@param y2 当前为2012年
@param calendar 根据日历对象来获取一年中有多少天
@return 计算后日期间隔的天数
/
public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){
int day = d1 - d2;
int betweenYears = y1 - y2;
List d366 = new ArrayList();
if(calendargetActualMaximum(CalendarDAY_OF_YEAR) == 366){
Systemoutprintln(calendargetActualMaximum(CalendarDAY_OF_YEAR));
day += 1;
}
for (int i = 0; i < betweenYears; i++) {
// 当年 + 1 设置下一年中有多少天
calendarset(CalendarYEAR, (calendarget(CalendarYEAR)) + 1);
maxDays = calendargetActualMaximum(CalendarDAY_OF_YEAR);
// 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个
if(maxDays != 366){
day += maxDays;
}else{
d366add(maxDays);
}
// 如果最后一个 maxDays 等于366 day - 1
if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
day -= 1;
}
}
for(int i = 0; i < d366size(); i++){
// 一个或一个以上的366天
if(d366size() >= 1){
day += d366get(i);
}
}
return day;
}
/
将日期字符串装换成日期
@param strDate 日期支持年月日 示例:yyyyMMdd
@return 1970年1月1日器日期的毫秒数
/
public static long getDateTime(String strDate) {
return getDateByFormat(strDate, "yyyyMMdd")getTime();
}
/
@param strDate 日期字符串
@param format 日期格式
@return Date
/
public static Date getDateByFormat(String strDate, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try{
return (sdfparse(strDate));
}catch (Exception e){
return null;
}
}
例2
代码如下 复制代码
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class test16 {
/
@param args
@throws ParseException
/
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1=sdfparse("2012-09-08 10:10:10");
Date d2=sdfparse("2012-09-15 00:00:00");
Systemoutprintln(daysBetween(d1,d2));
Systemoutprintln(daysBetween("2012-09-08 10:10:10","2012-09-15 00:00:00"));
}
/
计算两个日期之间相差的天数
@param smdate 较小的时间
@param bdate 较大的时间
@return 相差天数
@throws ParseException
/
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdfparse(sdfformat(smdate));
bdate=sdfparse(sdfformat(bdate));
Calendar cal = CalendargetInstance();
calsetTime(smdate);
long time1 = calgetTimeInMillis();
calsetTime(bdate);
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
/
字符串的日期格式的计算
/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = CalendargetInstance();
calsetTime(sdfparse(smdate));
long time1 = calgetTimeInMillis();
calsetTime(sdfparse(bdate));
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
}
例3
代码如下 复制代码
//取得剩余天数
SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
Date d0=new javautilDate();
Date d1=dfparse(end_date);
long time0=d0getTime();
long time1=d1getTime();
Systemoutprintln((time1-time0)/(1000606024));
这样算两个时间相差的天数比较好
代码如下 复制代码
/
计算两个日期之间相差的天数
@param date1
@param date2
@return
/
public static int diffdates(Date date1, Date date2) {
int result = 0;
ElapsedTime et = new ElapsedTime();
GregorianCalendar gc1 = new GregorianCalendar();
GregorianCalendar gc2 = new GregorianCalendar();
gc1setTime(date1);
gc2setTime(date2);
result = etgetDays(gc1, gc2);
return result;
}
然后ElapseTime中的方法是:
代码如下 复制代码
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2after(g1)) {
gc2 = (GregorianCalendar) g2clone();
gc1 = (GregorianCalendar) g1clone();
} else {
gc2 = (GregorianCalendar) g1clone();
gc1 = (GregorianCalendar) g2clone();
}
gc1clear(CalendarMILLISECOND);
gc1clear(CalendarSECOND);
gc1clear(CalendarMINUTE);
gc1clear(CalendarHOUR_OF_DAY);
gc2clear(CalendarMILLISECOND);
gc2clear(CalendarSECOND);
gc2clear(CalendarMINUTE);
gc2clear(CalendarHOUR_OF_DAY);
while (gc1before(gc2)) {
gc1add(CalendarDATE, 1);
elapsed++;
}
return elapsed;
}
其实使用joda最简单
代码如下 复制代码
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = Perioddays(2);
return datetimeRentedplus(rentalPeriod)isBeforeNow()
}
具体如下:
javautilCalendar
voidsetTime(Date date)
Sets this Calendar's time with the given Date设置日期时间
abstract void add(int field, int amount)
Adds or subtracts the specified amount of time to the given calendar field,
based on the calendar's rules
参数1是 CalendarDAY_OF_MONTH
参数2是天数,如果是负数,则为减
DategetTime()
Returns a Date object representing thisCalendar's time value (millisecond offset from the Epoch")得到时间
扩展资料
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
(参考资料 百度百科 Java)
以上就是关于java 输入月份和年份,就可以直接输出对应天数,用if结构全部的内容,包括:java 输入月份和年份,就可以直接输出对应天数,用if结构、java中计算两个日期之间差的天数、java 获取当前时间,将天数减一天,返回Date.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)