`
jianghe_03
  • 浏览: 105353 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于java日期的小结

    博客分类:
  • J2SE
阅读更多
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,  ;
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()));
输出:
2006-01-02

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,  ;
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));
输出:
        2006-08-30
        2006-09-03
(2)roll方法
cal.set(Calendar.YEAR,   2006);
cal.set(Calendar.MONTH,  ;
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));
输出:
        2006-09-29
        2006-09-03
可见,roll()方法在本月内循环,一般使用add()方法;

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);

9.   java   和   具体的数据库结合

在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver   数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型
你可以使用dateFormat定义时间日期的格式,转一个字符串即可

class   Datetest{
*method   将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
*@param   dateString   需要转换为timestamp的字符串
*@return   dataTime   timestamp

public   final   static   java.sql.Timestamp   string2Time(String   dateString)
throws   java.text.ParseException   {
DateFormat   dateFormat;
dateFormat   =   new   SimpleDateFormat("yyyy-MM-dd   kk:mm:ss.SSS",   Locale.ENGLISH);//设定格式
//dateFormat   =   new   SimpleDateFormat("yyyy-MM-dd   kk:mm:ss",   Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date   timeDate   =   dateFormat.parse(dateString);//util类型
java.sql.Timestamp   dateTime   =   new   java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
return   dateTime;
}

*method   将字符串类型的日期转换为一个Date(java.sql.Date)
*@param   dateString   需要转换为Date的字符串
*@return   dataTime   Date

public   final   static   java.sql.Date   string2Date(String   dateString)
throws   java.lang.Exception   {
DateFormat   dateFormat;
dateFormat   =   new   SimpleDateFormat("yyyy-MM-dd",   Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date   timeDate   =   dateFormat.parse(dateString);//util类型
java.sql.Date   dateTime   =   new   java.sql.Date(timeDate.getTime());//sql类型
return   dateTime;
}

public   static   void   main(String[]   args){
Date   da   =   new   Date();
注意:这个地方da.getTime()得到的是一个long型的值
System.out.println(da.getTime());

由日期date转换为timestamp

第一种方法:使用new   Timestamp(long)
Timestamp   t   =   new   Timestamp(new   Date().getTime());
System.out.println(t);

第二种方法:使用Timestamp(int   year,int   month,int   date,int   hour,int   minute,int   second,int   nano)
Timestamp   tt   =   new   Timestamp(Calendar.getInstance().get(
            Calendar.YEAR)   -   1900,   Calendar.getInstance().get(
            Calendar.MONTH),   Calendar.getInstance().get(
            Calendar.DATE),   Calendar.getInstance().get(
            Calendar.HOUR),   Calendar.getInstance().get(
            Calendar.MINUTE),   Calendar.getInstance().get(
            Calendar.SECOND),   0);
System.out.println(tt);

try   {
String   sToDate   =   "2005-8-18";//用于转换成java.sql.Date的字符串
            String   sToTimestamp   =   "2005-8-18   14:21:12.123";//用于转换成java.sql.Timestamp的字符串
            Date   date1   =   string2Date(sToDate);
            Timestamp   date2   =   string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//结果显示
System.out.println("Timestamp:"+date2.toString());//结果显示
}catch(Exception   e)   {
e.printStackTrace();
}
}
}  
分享到:
评论
1 楼 lishali12345 2008-04-12  
资料整理得真好!
好东西
值得收藏!

相关推荐

    JAVA日期判断方法小结

    JAVA中常见日期判断方法,比如:是否为润年? 获取指定年月的天数等等.

    java日期处理小结

    java日期处理 和格式解析 包含java.util.Calender java.util. GregorianCalendar java.util.Date

    常用的java日期比较和日期计算方法小结

    主要为大家详细总结了常用的java日期比较和日期计算方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java中Date和Calendar日期处理

    关于java中date和Calendar日期处理小结,包含一些常用方法等

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

    1.3.11 小结 1.4 java中的一些常用词汇 1.5 J2SE学习中的30个基本概念 1.6 Java线程 1.7 Java 5.0多线程编程 1.8 Java Socket编程 1.9 Java的内存泄漏 1.10 抽象类与接口的区别 1.11 Java变量类型间的相互转换 2 ...

    Java基础知识点总结.docx

    Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java8 LocalDateTime极简时间日期操作小结

    主要介绍了Java8-LocalDateTime极简时间日期操作整理,通过实例代码给大家介绍了java8 LocalDateTime 格式化问题,需要的朋友可以参考下

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    Java数据结构和算法中文第二版(1)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 ...

    JAVA SE学习精华集锦

    1.3.11 小结 56 1.4 java中的一些常用词汇 56 1.5 J2SE学习中的30个基本概念 58 1.6 Java线程 60 1.7 Java 5.0多线程编程 65 1.8 Java Socket编程 80 1.9 Java的内存泄漏 85 1.10 抽象类与接口的区别 86 1.11 Java...

    Java EE Web开发实例精解完整光盘

    本章小结 第3章 管理和维护应用程序状态 例程3-1:购物车 例程3-2:聊天室 例程3-3:网站计数器 本章小结 第4章 访问企业信息资源 例程4-1:发送接收E-mail 例程4-2:访问数据库 例程4-3:创建基于XML的网上论坛 ...

    java基础案例与开发详解案例源码全

    3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

Global site tag (gtag.js) - Google Analytics