zoukankan      html  css  js  c++  java
  • Java里日期转换及日期比较大小

    1、比较日期的大小:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//创建日期转换对象hh:mm:ss为时分秒,年月日为yyyy-MM-dd 
    
    Date dt1 = df.parse("2017-11-13 15:00:00");//将字符串转换为date类型  
    Date dt2 = df.parse("2017-11-13 17:00:00");  
    if(dt1.getTime()>dt2.getTime()){……}//比较时间大小:如果dt1大于dt2

      注意:字符串这里需要parse转一下日期类型,否则没有getTime()。

    一种:
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    java.util.Date dateBegin=df.parse(ruleStatus.getExecuteTime());
    java.util.Date dateEnd=df.parse(tempRuleStatus.getExecuteTime());
    if(dateBegin.getTime() > dateEnd.getTime()){}
    
    二种:
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String dateBegin=df.format(df.parse(ruleStatus.getExecuteTime()));
    String dateEnd=df.format(df.parse(tempRuleStatus.getExecuteTime()));
    if(Date.valueOf(dateBegin).getTime() > Date.valueOf(dateEnd).getTime()){}

    注意:比较日期大小的时候需要注意12小时制和24小时制的区分(最好用24小时制)

    //24小时制
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    //12小时制
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    new Date("2017-11-15 11:34:14").getTime()
    //1510716854000
    
    new Date("2017-11-15 12:08:12").getTime()
    //1510718892000
    
    new Date("2017-11-15 00:08:12").getTime()
    //1510675692000

      如果是12小时制,那么"2017-11-15 12:08:12"是按"2017-11-15 00:08:12"计算getTime(),所以会比"2017-11-15 11:34:14"小,这点就容易引起问题,需要注意。

    2、java String类型与Date日期类型互相转换

      插入数据库时,存入当前日期,当在界面展示时,出现进行转换成指定的格式,如****年**月**日,或****/**/**等等这种格式。对于以上要求,需要进行数据格式化操作。

    (1)Date格式转化成String格式:

    java.text.SimpleDateFormat   formatter   = new   SimpleDateFormat( "yyyy-MM-dd ");

    String date = formatter.format(new Date());  //格式化数据,格式化的格式为:****-**-**,如2014-10-30.

    (2)String格式的数据转化成Date格式:

    java.text.SimpleDateFormat   formatter   = new   SimpleDateFormat( "yyyy-MM-dd ");

    String   s= "2011-07-09 "; 

    Date  date   =   formatter.parse(s);

    3、String转换为Timestamp:

      两种方式将String类型的数据转换为Timestamp类型的数据

    (1)使用Timestamp的valueOf()方法

    String str = "2015-02-25 11:11:11";  
    Timestamp t = Timestamp.valueOf(str); 

    (2)使用Timestamp的构造方法:"yyyy-MM-dd hh:mm:ss":12小时制;"yyyy-MM-dd HH:mm:ss":24小时制

        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
        try {  
            Date date = sf.parse(str);  
            System.out.println(date);  
            Timestamp t1 = new Timestamp(date.getTime());  
            System.out.println(t1);  
        } catch (ParseException e) {  
            e.printStackTrace();  
        }  

    4、解决数据库中插入时间丢失时分秒问题:

      java.util.Date需要转换为java.sql.Date,常规的方式转换过来只可以得到年月日,如若要取得时分秒,可以用Date的子类Timestamp。

      Java在向数据库中插入时间的时候,常常遇到时、分、秒丢失的情况,这种情况的发生一般是由于时间日期对象使用错误造成的。

      java.util.Date是不能直接插入数据库中的,虽然它包含了日期和时分秒。java.sql.Date可以直接插入数据库,但是它只有日期而没有时间;java.sql.Time可以直接插入数据库,但是它只有时间,没有日期;以上这些往往不能满足我们的需要。

      如果我们要插入日期和时间,那么就要相办法来使用java.sql.Timestamp来向数据库插入。java.sql.Timestamp可包含了日前和到毫秒的时间值,在程序中,我们常常是使用的java.util.Date,所以就要有解决的方法来实现。有如下方法将java.util.Date转化为java.sql.Timestamp:

    public java.sql.Timestamp getTimestamp(Date date) {
        return new java.sql.Timestamp(date.getTime());
    }

      这样,我们可以将我们使用的java.util.Date转化,然后插入数据库,便可以解决时、分、秒丢失的问题。
      由此可以看到我们向数据库传入或传出值是尽量不要使用getDate方法或setDate方法,这样会丢失数据,解决的办法是:
      (1)改用java.sql.Timestamp 
      (2)传日期形式的字符串,在存储过程接收到后在存储过程中使用to_date处理,对于输出的使用to_char处理
      (3)传TO_DATE字符串进存储过程

      我这里做了对应三种方法的处理,请选用。

  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/goloving/p/7828662.html
Copyright © 2011-2022 走看看