爱程序网

时间的处理

来源: 阅读:

时间的处理

简介:

在旧版本 JDK 的时代,有不少代码中日期取值利用了 java.util.Date 类,但是由于 Date 类不便于实现国际化,其实从 JDK1.1 开始,就更推荐使用 java.util.Calendar 类进行时间和日期方面的处理。

目录:

  1.  MySql与Java的时间类型的对应关系

  2. 与时间日期有关的类

  3. 获取当天时间的三种方式

  4. 判断一个字符串是不是一个合法的日期格式

  5.  小练笔

  6. 日期和时间模式

 MySql与Java的时间类型的对应关系

 

     MySql的时间类型有                         Java中与之对应的时间类型

        date                                      java.sql.Date

       Datetime                                  java.sql.Timestamp

       Timestamp                                java.sql.Timestamp

       Time                                        java.sql.Time

       Year                                         java.sql.Date

 

 

 

与时间日期有关的类

 

  java.util.Date。实现类,其对象具有时间、日期组件。

  java.util.Calendar。抽象类,其对象具有时间、日期组件。

  java.sql.Date。实现类,其对象具有日期组件。

  java.sql.Time。实现类,其对象具有时间组件。

  java.sql.Timestamp。实现类,其对象具有时间日期组件。

  java.text.DateFormat。抽象类,其对象格式化时间日期。

  java.text.DateFormatSymbols。实现类,其对象为格式化时间日期提供参数。

 

(上图有几处错误,Calendar拼写错误。)

  以上的图列出了部分常用的类。我们一般会使用的类java.util.Date、java.util.Calendar、java.sql.Timestamp、java.text.DateFormat进行时间日期操作,因为他们有完全的时间日期组件和全面的格式化功能。

 

值得注意的是:java.sql.Date没有时间组件!而java.sql.Time没有日期组件!再次提醒。什么意思呢?大家请看下面的代码:

 

public static void main(String[] args) {
        /*
         * 以下代码用于向大家展示各个时间日期类对象的包含组件。
         */
        java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
        System.out.println(sqlDate.toString()); // 输出结果:2012-09-01
        java.sql.Time sqlTime = new java.sql.Time(System.currentTimeMillis());
        System.out.println(sqlTime.toString()); // 输出结果:12:35:11
        java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(System.currentTimeMillis());
        System.out.println(sqlTimestamp.toString()); // 输出结果:2012-09-01 12:36:33.544
        java.util.Date utilDate = new java.util.Date(System.currentTimeMillis());
        System.out.println(utilDate.toString()); // 输出结果:Sat Sep 01 12:37:34 CST 2012
        java.util.Calendar cl = java.util.Calendar.getInstance();
        System.out.println(cl.getTime().toString()); // 输出结果:Sat Sep 01 12:39:51 CST 2012
        
        /*
         * 以下代码用于试验java.sql.Date和java.sql.Time是否具有完整组件。 
         */
        System.out.println();
        try {
            System.out.println(sqlDate.getHours());
        } catch (Exception e) {
            System.out.println(e.getMessage()); // 输出 null
        }
        try {
            System.out.println(sqlTime.getDate());
        } catch (Exception e) {
            System.out.println(e.getMessage()); // 输出 null
        }
        
        /*
         * 下面的代码给大家展示时间日期的格式化。
         */
        System.out.println();
        java.text.DateFormat dateFormat = java.text.SimpleDateFormat.getInstance();
        // java.util.Date原本的格式
        System.out.println(utilDate.toString()); // 输出:Sat Sep 01 13:16:13 CST 2012
        // java.util.Date格式化后的格式
        System.out.println(dateFormat.format(sqlDate)); // 输出:12-9-1 下午1:16
        System.out.println();
        // 很多时候以上的结果并不是我们希望的,我们希望更加自由、更见简单的操作方式
        // 此时,java.text.SimpleDateFormat就成了我们的不二选择
        // SimpleDateFormat提供了无参和自定义格式参数的构造方法使我们能够轻松地实现自定义格式化
        java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
        System.out.println(simpleDateFormat.format(sqlDate)); // 输出:2012-09-01 13:20:41 下午
    }

 

获取当天时间的三种方式

 

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateDemo {
    public static void main(String[] args) {

    /*
    *             日期第一种写法
    * java.util.Date只推荐两种方式类构造Date实例。
    * 1.传入long(长整型)类型的数字来构造Date实例
    * 2.通过无参构造函数还构造Date实例,
    * 注:系统在调用无参构造函数时会调用  this(System.currentTimeMillis())这个语句,
    * 换句话说,无参构造函数也是通过传入long(长整型)类型的数字来达到构造Date实例的目的的
    */
    java.util.Date utilNow = new java.util.Date( );
//等同java.util.Date utilNow = new java.util.Date(System.currentTimeMillis());    
    SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
    System.out.println(ft.format(utilNow));
   
    /*
    * 日期第二种写法
    * Calendar提供四个方法来构造是实例:
    * 1.getInstance() 
    * 2.getInstance(TimeZone zone)
    * 3.getInstance(Locale aLocale)
    * 4.getInstance(TimeZone zone, Locale aLocale)
    * 注:因为Calendar是一个抽象类,抽象类不能生成实例。
    * 所以getInstance()都是返回Calendar子类的实例
    */
    Calendar today = Calendar.getInstance();
    int year = today.get(Calendar.YEAR);
    int month = today.get(Calendar.MONTH)+1;
    int day = today.get(Calendar.DATE);
    System.out.println(year+"-"+month+"-"+day);
    
    /*
    *              日期第三种写法           
    * java.sql.Date只推荐传入long(长整型)类型的数字来构造Date实例
    */
    java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
    System.out.println(sqlDate);
    
    
    }
 }
//判断一个字符串是不是一个合法的日期格式 public static boolean isValidDate(String str) { boolean convertSuccess=true;      // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写; SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm"); try {      // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01 format.setLenient(false); format.parse(str); } catch (ParseException e) { // e.printStackTrace(); // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 convertSuccess=false; } return convertSuccess; }

 

 

  小练笔

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author Administrator
 *
 */
public class Tester {

    /**
     * @param args
     * SimpleDateFormat类可以实现多种格式的时间输出
     * Calendar类可以方便的获取时间片段
     * 
     */
    public static void main(String[] args) {
        
        Date utilDate=new Date();//获得当前JVM所在的OS的时间。
        System.out.println(utilDate);//输出的格式为Sun Dec 20 19:12:10 CST 2015
        
        System.out.println(utilDate.getTime());//将utilDate的时间用long(长整型)类型的数字来表示
        
        Date utilDate2=new Date(1862595770171L); //整数默认就是int, 小数默认就是double型,所以加上了L代表long类型
        System.out.println(utilDate2);
       
        //以下三个方法也比较常用
        System.out.println(utilDate2.before(utilDate));
        System.out.println(utilDate2.after(utilDate));
        System.out.println(utilDate2.equals(utilDate));
        
        
        //-----------------时间和字符串之间的互相转换----------------------//
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS 本年第D天, 第w周,这个月的第W周。E");
        System.out.println(sdf.format(utilDate));
        
        String oldTime="1989-2-12 12:23:31";
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf2.setLenient(false); //关闭容错开关
        try {
            Date oldDate=sdf2.parse(oldTime); //字符串的格式要和解析器的格式一致
            System.out.println(sdf.format(oldDate)); //字符串只要被正确解析成Date,那么用哪个解析器来进行格式化输出就无所谓了。
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("输入的时间有误或者格式不对,解析失败!");
        }
        
        //--------------时间分析,取出这个时间的某个部分 (datepart)--------------------//
        System.out.println(1900+utilDate.getYear()); //过期方法
        
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(utilDate);//如果是要对当前的时间进行操作,这个语句可以省略,因为默认值就是当前时间。
        
        //获取时间片段的两种方式
        System.out.println(calendar.get(5));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));
     
    }

}

 

日期和时间模式

 

(上图有一出错误:m和mm中,前者表示当分钟数小于10会只占用一个输出位,即输出0-9而不会输出00-09)

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助