• 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字符串进存储过程

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

  • 相关阅读:
    获取动态类型变量的属性值
    C#项目实例中读取并修改App.config文件
    c#防止多次运行代码收集
    c# winform 关闭窗体时同时结束线程实现思路
    C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法
    用 C# 在 Windows 7 中写注册表想到的
    this指针
    UML类图,用例图,时序图
    常见的框架模式:MVC MVP MTV等
  • 原文地址:https://www.cnblogs.com/goloving/p/7828662.html
Copyright © 2020-2023  润新知