`

Date和Calendar类及日期操作的常用用法

    博客分类:
  • java
 
阅读更多
1.计算某一月份的最大天数

Calendar time=Calendar.getInstance(); 
time.clear(); 
time.set(Calendar.YEAR,year); //year 为 int 
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间


2.Calendar和Date的转化

(1) Calendar转化为Date
Calendar cal=Calendar.getInstance(); 
Date date=cal.getTime(); 


(2) Date转化为Calendar
Date date=new Date(); 
Calendar cal=Calendar.getInstance(); 
cal.setTime(date);


3.格式化输出日期时间 (这个用的比较多)
Date date=new Date(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
String time=df.format(date); 
System.out.println(time); 



4.计算一年中的第几星期


(1)计算某一天是一年中的第几星期
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 8); 
cal.set(Calendar.DAY_OF_MONTH, 3); 
int weekno=cal.get(Calendar.WEEK_OF_YEAR);


(2)计算一年中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.WEEK_OF_YEAR, 1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(df.format(cal.getTime())); 


5.add()和roll()的用法(不太常用)

(1)add()方法
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 8); 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.add(Calendar.DATE, -4); 
Date date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.add(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date));


(2)roll方法
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 8); 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.roll(Calendar.DATE, -4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.roll(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 


6.计算两个任意时间中间的间隔天数(这个比较常用)
(1)传进Calendar对象
public int getIntervalDays(Calendar startday,Calendar endday)...{ 
if(startday.after(endday)){ 
Calendar cal=startday; 
startday=endday; 
endday=cal; 
} 
long sl=startday.getTimeInMillis(); 
long el=endday.getTimeInMillis(); 

long ei=el-sl; 
return (int)(ei/(1000*60*60*24)); 
} 

(2)传进Date对象

public int getIntervalDays(Date startday,Date endday)...{ 
if(startday.after(endday))...{ 
Date cal=startday; 
startday=endday; 
endday=cal; 
} 
long sl=startday.getTime(); 
long el=endday.getTime(); 
long ei=el-sl; 
return (int)(ei/(1000*60*60*24)); 
} 

(3)改进精确计算相隔天数的方法
public int getDaysBetween (Calendar d1, Calendar d2) ...{ 
if (d1.after(d2)) ...{ 
java.util.Calendar swap = d1; 
d1 = d2; 
d2 = swap; 
} 
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); 
int y2 = d2.get(Calendar.YEAR); 
if (d1.get(Calendar.YEAR) != y2) ...{ 
d1 = (Calendar) d1.clone(); 
do ...{ 
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数 
d1.add(Calendar.YEAR, 1); 
} while (d1.get(Calendar.YEAR) != y2); 
} 
return days; 
} 

注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较
如:1年前日期(注意毫秒的转换)
java.util.Date myDate=new java.util.Date(); 
long myTime=(myDate.getTime()/1000)-60*60*24*365; 
myDate.setTime(myTime*1000); 
String mDate=formatter.format(myDate);


7. String 和 Date ,Long 之间相互转换 (最常用)


字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-比较

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US); 
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM"); 
long dvalue=d.getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String mDateTime1=formatter.format(d); 


8. 通过时间求时间

年月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E"); 
java.util.Date date2= formatter2.parse("2003-05 5 星期五"); 
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd"); 
String mydate2=formatter3.format(date2); 


求是星期几
mydate= myFormatter.parse("2001-1-1"); 
SimpleDateFormat formatter4 = new SimpleDateFormat("E"); 
String mydate3=formatter4.format(mydate); 








分享到:
评论

相关推荐

    Java基础之Date和Calendar类的使用方法

    Date类顾名思义,一看就知道是和日期有关的类了,这个类最主要的作用就是获得当 前时间了,然而这个类里面也具有设置时间以及一些其他的功能,可是由于本身设计的问题,这些方法却遭到众多批评,而这些遭受批评的...

    Java BigInteger类,BigDecimal类,Date类,DateFormat类及Calendar类用法示例

    BigDecimal类,Date类,DateFormat类及Calendar类用法,结合实例形式详细分析了Java使用BigInteger类,BigDecimal类,Date类,DateFormat类及Calendar类进行数值运算与日期运算相关操作技巧,需要的朋友可以参考下

    Java的日期时间处理类讲解代码( Date 、Calendar、SimpleDateFormat、LocalDateTime)

    本源码资源提供了Java中的日期时间处理类相关内容,包括日期、时间和时区的操作方法和示例。它涵盖了Java编程中常用的日期时间处理需求以及如何使用日期时间类来解决这些问题。 适用人群 本源码资源适用于具备一定...

    java常用工具类的使用

    该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...

    java2 使用教程(第三版) 实验指导 上机实践5 字符串、时间与数字

    (日期比较中【代码2】和【代码4】处的public final void set(int year,int month,int date) 方法在设置月份时要在原来的基础上减掉一,即0表示一月,1表示2月等,所以此处代码要改成: Calendar calendar = ...

    廖雪峰 Java 教程.doc

    廖雪峰 Java 教程 Java教程 ...Date和Calendar LocalDateTime ZonedDateTime DateTimeFormatter Instant 最佳实践 单元测试 编写JUnit测试 使用Fixture 异常测试 条件测试 参数化测试

    (超赞)JAVA精华之--深入JAVA API

    1.1.2.1.1 日期类Date 1.1.2.1.2 日历类Calendar 1.1.2.1.3 随机数类Random 1.1.2.1.4 向量类Vector 1.1.2.1.5 栈类Stack 1.1.2.1.6 哈希表类Hashtable 1.1.2.1.7 位集合类BitSet Hashtable类 1.1.3 JAVA IO包 ...

    JAVA SE学习精华集锦

    1.1.2.1.1 日期类Date 9 1.1.2.1.2 日历类Calendar 10 1.1.2.1.3 随机数类Random 11 1.1.2.1.4 向量类Vector 12 1.1.2.1.5 栈类Stack 13 1.1.2.1.6 哈希表类Hashtable 14 1.1.2.1.7 位集合类BitSet 15 Hashtable类 ...

    疯狂JAVA讲义

    6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 对象与垃圾回收 225 6.9.1 对象在内存中的状态 226 6.9.2 强制垃圾回收 227 6.9.3 finalize方法 228 ...

    AIC的Java课程1-6章

     能够使用Date, Calendar, Locale, DateFormat,NumberFormat类创建、改变和显示日期、数字和货币对象。  理解正则表达式,学会使用String.matches方法,Pattern和Matcher类进行模式匹配。  学会...

    Java2实用教程.rar

    9 7在同步方法中使用wait notif 和nodf3 All 方法 9 8挂起 恢复和终止线程 9 9计时器线程Timer 9 10线程联合 9 11守护线程 习题 第10章输入输出流 10 1File类 10 2FileInputStream类 10 3FileOutputStream类 10 4...

    Java开发详解.zip

    031105_【第11章:Java常用类库】_日期操作类(Date、Calendar)笔记.pdf 031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    Java开发技术大全 电子版

    13.5Date类和Calendar类的使用404 13.5.1Date类的简单使用404 13.5.2使用SimpleDateFormat格式化输出时间405 13.5.3Calendar类的特色408 13.5.4利用GregorianCalendar输出日历411 13.6Formatter类的使用413 ...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    9.2.1 常用map操作类 284 9.2.2 访问map键值 288 9.3 重点复习 291 9.4 课后练习 292 chapter10 输入输出 299 10.1 inputstream与outputstream 300 10.1.1 串流设计的概念 300 10.1.2 串流继承架构 ...

    Java基础知识点总结.docx

    <java.lang>.Date:日期类,月份从0—11 92 <java.lang> Calendar:日历类 93 十六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File类 102 Java.util.Properties 103 ...

    Java 2实用教程(第三版)实验指导与习题解答

    实验1 String类的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号灯 25 实验3 布局与日历 28 上机实践7 组件及事件处理2 31 实验1 方程求根 31...

    oracle详解

    Territory:指定货币和数字的格式,地区和计算星期及日期的习惯。 Characterset:控制客户端应用程序使用的字符集。通常设置或等于客户端的代码页。或者对于unicode应用设为UTF8。 在windows中,查询和修改NLS_LANG...

Global site tag (gtag.js) - Google Analytics