• 2007-03-27

    Java中对日期和时间的操作文档集锦

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://zhutong7758.blogbus.com/logs/4868770.html

    目录:

    JAVA中的时间操作... 1

    数据库查询问题... 5

    日期格式、日期的解析和日期的计算... 7

    java中怎样利用时间间隔计算日期... 17

    关于JAVA中时间操作的两个例子.. 19

    Date实用例程... 22

    JAVA中的时间操作

     选择自 leshui Blog

    经常看见jsp版里有人问时间操作的问题,这些问题一般包括:取当前时间,把一个指定的字符串时间转化成时间类型,求两个时间之间的天数,求一段时间以前的时间,求一段时间以后的时间,在这里就把这些问题汇总一下。

    <%@  page  contentType="text/html;charset=gb2312"%>

    <%@ page import="java.text.*"%>

    <%@ page import="java.util.*"%>

    <%

    //字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)

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

    out.println(d);

    out.println("<br>");

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String mDateTime1=formatter.format(d);

    out.println(mDateTime1);

    out.println("<br>");

    out.println(d.getTime());

    out.println("<br>");

       //当前时间

       Calendar cal  = Calendar.getInstance();

     //  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss G E D F w W a E F");

       String mDateTime=formatter.format(cal.getTime());

       out.println(mDateTime);

        out.println("<br>");

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

       out.println(mDate);

       out.println("<br>");

       //明天日期

       myDate=new java.util.Date();

       myTime=(myDate.getTime()/1000)+60*60*24;

       myDate.setTime(myTime*1000);

       mDate=formatter.format(myDate);

       out.println(mDate);

       out.println("<br>");

      //两个时间之间的天数

       SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

       java.util.Date date= myFormatter.parse("2003-05-1");

       java.util.Date mydate= myFormatter.parse("1899-12-30");

       long  day=(date.getTime()-mydate.getTime())/(24*60*60*1000);

       out.println(day);

       out.println("<br>");

    //加半小时

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    java.util.Date date1 = format.parse("2002-02-28 23:16:00");

    long Time=(date1.getTime()/1000)+60*30;

    date1.setTime(Time*1000);

    String mydate1=formatter.format(date1);

    out.println(mydate1);

    out.println("<br>");

     

    //年月周求日期

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

    out.println(mydate2);

    out.println("<br>");

    //求是星期几

    mydate= myFormatter.parse("2001-1-1");

    SimpleDateFormat formatter4 = new SimpleDateFormat("E");

    String mydate3=formatter4.format(mydate);

    out.println(mydate3);

    out.println("<br>");

    %>

     

    作者Bloghttp://blog.csdn.net/leshui/

     

    happyegg ( 2003-09-06)

    其实求几天几月几年前/后的方法,应该用Calendar类比较好的。
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH,1);
    cal.add(Calendar.YEAR,2000);
    date = cal.getTime();

    数据库查询问题

    作  者:          xinfudepangbian ()

     

    我想查询指定时间段的数据 比如 2006-4-4 2006-7-7 的数据

    日期是number 可数据库里是date ,我用什么方法转换阿 ,谢谢了,

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

    java.util.Date dt1 = sf.parse("2005-11-11");

    java.sql.Date qishiriqi = new java.sql.Date(dt1.getTime());

    java.util.Date dt2 = sf.parse("2006-07-14");

    java.sql.Date zhongzhiriqi = new java.sql.Date(dt2.getTime());

    源码发上 大家帮我看看  qishiriqi zhongzhiriqi 入库比较的

     

    --

    Calendar cals = Calendar.getInstance();

    cals.set(Calendar.YEAR,);

    cals.set(Calenar.MONTH,);

    cals.set(Calenar.DAY_OF_MONTH,);

    String secondDate = (new Timestamp(cals.getTimeInMillis())).toString();

    然后把firstDatesecondDate传到SQL语句中,执行它

    --

    String sql = "select * from TM_BUS_SPECIAL where LINE_NO = '" + request.getParameter("RiZhi_line_no") + "'" + "and CREATE_TIME between '" +qishiriqi + "'" + " and '" + zhongzhiriqi + "'";

    这样传日期和你用字符串传日期是一个效果,sql.Date被转成字符串了

    可以使用PreparedStatement,之前的日期转换仍然可用

     

    String sql = "select * from TM_BUS_SPECIAL where LINE_NO=? and CREATE_TIME between ? and ? " ;

    PreparedStatement pst = conn.preparedStatement(sql);

    pst.setString(1, request.getParameter("RiZhi_line_no"));

    pst.setDate(2, qishiriqi);

    pst.setDate(3, zhongzhiriqi);

    ResultSet rs = pst.executeQuery();

     

    1. parse要抛异常

    try{

    java.util.Date dt1 = sf.parse("2005-11-11");

    }catch(ParseException e){

    }

    2. 在( between '" +qishiriqi + "'" + " and '" + zhongzhiriqi )里 又把日期型以字串型传给了SQL 这里就不要再用字串了 直接 between " +qishiriqi + " and " + zhongzhiriqi 就可以了

     

     

    try{

    java.util.Date dt1 = sf.parse("2005-11-11");

    }catch(ParseException e){

    }

    2. 在( between '" +qishiriqi + "'" + " and '" + zhongzhiriqi )里又把日期型以字串型传给了SQL 这里就不要再用字串了 直接 between " +qishiriqi + " and " + zhongzhiriqi 就可以了

     

    没抛异常 而且是以字串传

     

    改了 就可以了

    如果是oracle,就用下面这一句:

     

    String sql = "select * from TM_BUS_SPECIAL where LINE_NO = '" + request.getParameter("RiZhi_line_no") + "'"  + "and CREATE_TIME between   to_date('"+qishiriqi+"','yyyy-mm-dd') and to_date('"+zhongzhiriqi+"','yyyy-mm-dd')'" ;

     

    其中qishiriqi,zhongzhiriqi是形如yyyy-mm-dd的日期字符串,"2006-07-29"

     

     

     

    日期格式、日期的解析和日期的计算

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


    我们将讨论下面的类:

    1
    、具体类(和抽象类相对)java.util.Date
    2
    、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
    3
    、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar

    具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.

    Date
    类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, , 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970, 1 100:00:00这一刻之前或者是之后经历的毫秒数.


    一、创建一个日期对象

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

    import java.util.Date; 
     
    public class DateExample1 { 
    public static void main(String[] args) { 
    // Get the system date/time 
    Date date = new Date(); 
     
    System.out.println(date.getTime()); 
    } 
    } 




    在星期六, 2001929, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期.

    那么, 现在我们已经知道了如何获取从197011日开始经历的毫秒数了. 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.


    二、日期数据?亩ㄖ聘袷?

    假如我们希望定制日期数据的格式, 比方星期六-9-29-2001. 下面的例子展示了如何完成这个工作:

    import java.text.SimpleDateFormat; 
    import java.util.Date; 
     
    public class DateExample2 { 
     
    public static void main(String[] args) { 
     
    SimpleDateFormat bartDateFormat = 
    new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); 
     
    Date date = new Date(); 
     
    System.out.println(bartDateFormat.format(date)); 
    } 
    } 



    只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.

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

    假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat

    历史上的今天:


    收藏到:Del.icio.us