`

Date类学习总结 

    博客分类:
  • 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.把字符串转化为java.util.Date
方法一:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date dt=sdf.parse("2005-2-19");
System.out.print(sdf.format(dt));    //输出结果是:2005-2-19

方法二:
java.util.Date dt=null;
DateFormat df=DateFormat.getDateInstance();
dt=df.parse("2005-12-19");
System.out.println(dt);              //输出结果为:Mon Dec 19 00:00:00 CST 2005
System.out.println(df.format(dt)); //输出结果为:2005-2-19

4.把字符串转化为java.sql.Date
字符串必须是"yyyy-mm-dd"格式,否则会抛出IllegalArgumentException异常
java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");
System.out.println(sdt);          //输出结果为:2005-9-6


5.格式化输出日期时间 (这个用的比较多)

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);

需要注意的一点:SimpleDateFormat类格式化一个字符串时,可根据需要调用 format() 或 parse() 函数;只不过format()返回String类型,parse()返回java.util.Date类型

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

(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()));
输出:
2006-01-02

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

8.计算两个任意时间中间的间隔天数(这个比较常用)
(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_F_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);
   3周前的日期
   Calendar cal3 = Calendar.getInstance();
cal3.add(cal3.DATE, -21);//取3周前的日期
String date = formatter.format(cal3.getTime());

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

10. 通过时间求时间

年月周求日期
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);

11. 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();
}
}
}


一、Date的构造函数

1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象并对其进行初始化以反映当前时间。

1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。 
参数: 
date - 相对于GMT 1970年1月1日00:00:00的毫秒数。

1.3从年月日时分秒构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)
这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。
 

分享到:
评论

相关推荐

    Java-Date 类的学习总结.docx

    Java Date 类学习总结 Java Date 类是 Java 语言中用于处理日期和时间的类,可以用来计算某一月份的最大天数、将字符串转化为日期、格式化输出日期时间等。本文将对 Java Date 类的常用方法进行总结。 1. 计算某一...

    Java-Date 类的学习总结.pdf

    Java-Date 类的学习总结 Date 类是 Java 语言中用于处理日期和时间的类别,在实际开发中经常会用到。下面是对 Date 类的学习总结,包括计算某一月份的最大天数、Calendar 和 Date 的转化、把字符串转化为 java.util...

    java Date 学习总结

    ### Java Date 学习总结 在Java开发过程中,时间日期处理是常见的需求之一。本文将对`java.util.Date`、`java.util.Calendar`以及`java.text.SimpleDateFormat`等类的使用进行详细总结,帮助读者更好地理解和掌握...

    util包里的Date类转换为sql包里的Date

    通过对以上两种转换方法的学习,我们可以看到从`java.util.Date`到`java.sql.Date`的转换并不复杂。选择哪种方法取决于具体的应用场景和需求。通常情况下,直接使用构造函数进行转换更为简洁高效;而通过字符串进行...

    JAVA中的继承学习总结

    ### JAVA中的继承学习总结 #### 一、Java中的继承概念 继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,...

    天空教室作业 写一个日期类Date

    本资源摘要信息涵盖了 C++ 程序设计的基础知识点,包括日期类 Date 的设计和实现、圆类 Circle 的设计和实现,以及点类 Point 的设计和实现。 一、日期类 Date 的设计和实现 在 C++ 程序设计中,日期类 Date 是一...

    总结date对象

    06总结Date对象的方法.html

    掌握DATE 类,掌握产生唯一数的方法

    根据给定的实验报告内容,本篇将详细解析与“掌握DATE 类,掌握产生唯一数的方法”相关的知识点。 ### 1. DATE 类简介 在Java中,`java.util.Date` 类用于表示特定的时间点,精确到毫秒。该类有两个构造方法:一个...

    flex 学习项目中总结的时间处理工具类DateUtils

    在这个名为"flex 学习项目中总结的时间处理工具类DateUtils"的项目中,我们可能找到了一个针对Flex开发环境优化的日期处理工具。Flex是一种基于Adobe ActionScript的开源框架,主要用于构建富互联网应用(RIA)。 `...

    date_input插件

    总结,jQuery date_input 插件是网页开发中处理日期输入的得力助手,其易用性、灵活性和良好的兼容性使其在众多日期插件中脱颖而出。通过深入理解和熟练运用,你可以为用户提供更加便捷的日期选择体验。

    java学习路线总结.doc

    - **日期和时间**:使用Date和SimpleDateFormat处理日期格式化,了解Calendar类的使用。 - **Java新特性**:学习Java 8及以上版本的新特性,如Lambda表达式、Stream API等。 **第五阶段:集合框架** - **集合概念**...

    date.zip_matlab中date函数

    总结起来,MATLAB中的`date`函数是处理日期和时间数据的关键工具,它与其他日期函数协同工作,提供了强大而灵活的日期处理能力。无论是数据的格式化、转换还是计算,MATLAB都能提供高效且直观的解决方案。通过不断...

    c++日期时间课程设计Time_Date。派生出DateTime类分享.pdf

    通过这个实验,我们学习了如何设计和实现一个 DateTime 类,该类继承自 Time 和 Date 类,以便于记录和运算日期和时间。我们还学习了如何考虑到日期和时间的运算规则,并使用对话框类来设置时间和日期。

    oracle学习总结

    ### Oracle学习总结 #### SQL基础语法 1. **数据定义语言(DDL)** - **创建表**:`CREATE TABLE table_name (column_name datatype constraints,...);` - `NOT NULL`:指定列不允许有空值。 - `UNIQUE`:指定列...

    jQuery Date Range Picker

    总结,jQuery Date Range Picker是一个强大且灵活的日期选择工具,能够轻松集成到你的Web应用中,为用户提供直观的日期范围选择体验。通过学习和掌握它的用法和配置选项,你可以根据项目需求定制出符合用户体验的...

    sqlserver学习总结.docx

    在SQL Server的学习中,我们首先会接触到数据库的基本操作,包括数据表的创建、数据的插入、查询等。这里,我们看到一系列关于SQL Server创建表的例子,涵盖了不同类型的字段定义,如整型(int)、字符串(varchar)...

    oralce学习总结

    ### Oracle 学习总结 #### Oracle 零基础学习文档概览 本文档旨在为初次接触 Oracle 数据库的初学者提供一个系统的学习指南。通过详细地解析 Oracle 的基本概念、安装配置过程以及常用操作命令等内容,帮助读者...

    Java中的集合学习总结

    ### Java中的集合学习总结 #### 集合框架概述 在Java编程语言中,集合框架是一种存储和操作数据的重要机制。它提供了灵活多样的数据结构,以满足不同场景下的需求。集合框架主要由三大核心部分组成:集(Set)、列表...

Global site tag (gtag.js) - Google Analytics