精华内容
下载资源
问答
  • Java Date 详解

    万次阅读 2015-02-06 22:16:07
    Java Date 详解 1.java.sql.Datejava.util.Date比较  ① java.sql.Date 只有日期,没有时间  ② java.util.Date 时间日期都具备  ③ ResultSet.getDate(columnInt)取得的值是java.sql.Date类型,只有日期,没有...
    Java Date 详解
    1.java.sql.Date与java.util.Date比较
      ① java.sql.Date 只有日期,没有时间
      ② java.util.Date 时间日期都具备
      ③ ResultSet.getDate(columnInt)取得的值是java.sql.Date类型,只有日期,没有时间,就算转换为java.util.Date同样没有时间
      ④ java.sql.Timestamp 时间日期都具备,ResultSet.getTimestamp(columnInt) 时间日期都有
      ⑤ 建表 T1 用以测试,建表语句↓
    create table t1(    
    id number not null,    
    charcol char default 'Y',    
    datecol date default sysdate,    
    intcol integer default 12);
    
    insert into t1 values(1,'y',sysdate,12);
    insert into t1 values(2,'n',sysdate,13);
    insert into t1 values(3,null,sysdate,null);
    commit;

      ⑥ DateTest 类(测试时间转换)
    package com.date;
    
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    public class DateTest {
    	public static void main(String[] args) {
    		Date date = new Date(System.currentTimeMillis());
    		 System.out.println(date);
    		java.util.Date date2 = new java.util.Date(System.currentTimeMillis());
    		 System.out.println(date2);
    
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    		String a = sdf.format(date2);
    		System.out.println(a);
    
    		Timestamp t = new Timestamp(System.currentTimeMillis());
    
    		String b = sdf.format(t);
    		System.out.println(b);
    
    		Calendar c = Calendar.getInstance();
    
    		c.setTime(date);
    		System.out.println(c.get(Calendar.MONTH));
    
    		String ss = "1898-12-12 09:08:23";
    		Timestamp t2 = Timestamp.valueOf(ss);
    		System.out.println(t2);
    		java.util.Date d1 = new java.util.Date();
    		SimpleDateFormat q = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    		System.out.println(q.format(d1));
    		java.sql.Date date3=new java.sql.Date(0);
    		
    		java.util.Date d2=new java.util.Date (date.getTime());
    		
    		Date sqlDate = new Date(date.getTime());
    		java.util.Date d3 = new java.util.Date(sqlDate.getTime());
    		System.out.println("utl获得秒数  "+d3.getSeconds());
    		DateTest.getSqlDate();
    	}
    	public static void getSqlDate(){
    		Connection con = DateTest.getConnection();
    		ResultSet rs = null;
    		PreparedStatement ps= null;
    		try {
    			 ps = con.prepareStatement("select * from t1 t where t.id = 1");
    			 rs = ps.executeQuery();
    			while (rs.next()) {
    				java.sql.Date sqlDate = rs.getDate(3);
    				java.util.Date utlDate = rs.getDate(3);
    				Timestamp tDate = rs.getTimestamp(3);
    				System.out.println("sqlDate  "+sqlDate);
    				System.out.println("utlDate  "+utlDate);
    				System.out.println("tDate  "+tDate);
    				java.util.Date Date2 = new java.util.Date(sqlDate.getTime());
    				System.out.println(Date2);
    			}
    		} catch (Exception e) {
    		}finally{
    			DateTest.closeJdbc(rs, con, ps);
    		}
    	}
    	public static Connection getConnection(){
    		Connection conn = null;
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    			String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    			String userName = "slt_plat";
    			String passWord = "slt_plat";
    			conn = DriverManager.getConnection(url, userName, passWord);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} 
    		return conn;
    	}
    	public static void closeJdbc(ResultSet rs,Connection con,Statement pst){
    		if(rs!=null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(con!=null){
    			try {
    				con.close();
    			} catch (SQLException e) {
    			}
    		}
    		if(pst!=null){
    			try {
    				pst.close();
    			} catch (SQLException e) {
    			}
    		}
    	}
    
    }
    
    2.数据库配置对应Date
      ① @Temporal(TemporalType.DATE)数据库只记录日期
      ② 字段中的Date的类型必须是java.uril.Date,如果是sql.Date时间精度设置无效
      ③ @Enumerated(EnumType.STRING)枚举存入数据库以String存入,EnumType.ORDINAL存入为枚举
      ④ 枚举Titl 类
    package com.sf;
    
    public enum Tile {
    A,B,C
    }
    
      ⑤ Entity
    package com.sf;
    
    import java.util.Date;
    
    import javax.persistence.Entity;
    import javax.persistence.EnumType;
    import javax.persistence.Enumerated;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    
    @Entity(name="teacher")
    @Table(name = "teacher", catalog = "lportal")
    public class Teacher {
    @Id
    /*
     * @GeneratedValue = native auto自动生成;
     */
    @GeneratedValue
    private int id;
    private String name;
    private String title;
    /*
     * @Enumerated(EnumType.STRING)自定义类型;
     */
    @Enumerated(EnumType.ORDINAL)
    private Tile tile;
    /**
     * @Temporal(value=)value可以默认不写,直接写入值;
     * @Temporal(TemporalType.DATE)数据库只记录日期;
     * java.sql.Date 时间精度只有日期,没有时间,下面的Date如果用这个类,时间精度设置无效;
     */
    
    private Date birthDate;
    @Temporal(TemporalType.TIME)
    public Date getBirthDate() {
    	return birthDate;
    }
    public void setBirthDate(Date birthDate) {
    	this.birthDate = birthDate;
    }
    public int getId() {
    	return id;
    }
    public void setId(int id) {
    	this.id = id;
    }
    public String getName() {
    	return name;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public String getTitle() {
    	return title;
    }
    public void setTitle(String title) {
    	this.title = title;
    }
    
    public Tile getTile() {
    	return tile;
    }
    public void setTile(Tile tile) {
    	this.tile = tile;
    }
    public Teacher() {
    }
    public Teacher(int id,Date date, String name, String title,Tile tile) {
    	this.id = id;
    	this.name = name;
    	this.title = title;
    	this.tile = tile;
    	this.birthDate = date;
    }
    }
    


    展开全文
  • SimpleDateFormat format = ... java.sql.Date date = new java.sql.Date(d.getTime()); 代码是这样的。 java Date数据格式是 2015-10-08 09:21:33 但是转成sql Date后变成了2014-01-08 这是何故
  • Java Date总结

    万次阅读 2016-11-02 21:30:02
    在日常的程序中,我们经常会用到日期时间,常常会从字符串和日期进行转换,因此本文决定深入学习一下javaDate相关部分,我这里用的jdk是8.   一 java中的日期总述 在编程中,一般涉及到日期的操作有三种: 1日期...

    在日常的程序中,我们经常会用到日期时间,常常会从字符串和日期进行转换,因此本文决定深入学习一下javaDate相关部分,我这里用的jdk8.

     

    一 java中的日期总述

    在编程中,一般涉及到日期的操作有三种:

    1日期的表示,2日期的转换,3日期的设定修改。

     

    JAVAjdk1.1 之前,Date类负责这三个功能。但是jdk1.1后,java把这三个功能分成了三个类,其中:

    Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为epoch。在后文中如果没有明确说明,毫秒数就是指从1970年到对应时间的毫秒数。在Java Date类内部其实也是一个毫秒数,对外表现为一个Date对象,后面我将对Date类进行深入探究。

    Calendar是一个工具类,负责对Date类进行修改等操作,以及从Date类中提取年月日等时间的特定信息。

    DateFormat 则负责日期的转换,比如读取特定格式的字符串,转换成date对象,或者将date对象按照指定的格式转成字符串。

     

    由于DateCalendarDateFormat这几个类关联不大,因此我这里分别对各个类进行探究,就不画统一的类图了。

     

    二 Date类探究

    为了更好的理解Date,可以从jdk中看一下Date类的结构。

    Date类的方法还是比较多的,但是大多数都是Deprecated,也就是我上面所说的从Jdk1.1开始,将其他的功能都分流到了CalendarDateFormat类中。

    正如我们之前讲过的,Date类内部其实是一个1970到其代表的时间之间的毫秒数,那就必然有一个filed要表示这个毫秒数,这就是 fastTime这个域的作用了。

    private transient long fastTime;


    在我们日常的使用Date类时,必然都要初始化一个Date对象,这时看看Date的两个剩余的构造函数,一个是无参的,一个是接收了一个long类型的毫秒数,无参构造函数其实是调用了系统的当前毫秒数。最终都是将fastTime这个属性赋值一个对应时间的毫秒数。

    public Date() {
        this(System.currentTimeMillis());
    }
    
    public Date(long date) {
        fastTime = date;
    }

    Date类还可以对时间进行比较,比如beforeaftercompareTo等方法,都是对时间的先后进行比较的。

    Date类还是保留一些工具类的方法的,比如这个静态的getMillisOf()就是获取date对象的毫秒数。

    static final long getMillisOf(Date date) {
        if (date.cdate == null || date.cdate.isNormalized()) {
            return date.fastTime;
        }
        BaseCalendar.Date d = (BaseCalendar.Date) date.cdate.clone();
        return gcal.getTime(d);
    }

     Calendar

    1 Calendar类的作用

    在程序内部一个时间可以表示为一个毫秒数,但是对于我们日常程序中,可能需要用到这个时间点的年份,月份,小时数等详细信息,这时Calendar类就走上了舞台。

     

    Calendar类前面说是一个工具类,其实它比工具类还是更深一步的,它更像是一个加强版的Date类。一般的工具类会提供一堆static方法,工具类本身并不存储对象。但是Calendar类不是像一般的工具类只提供一堆static方法,而是在其内部本身就有一个毫秒数,所以它不是对外部Date对象操作,而是对内部的毫秒数进行转化,所以说Calendar本身就包含了日期时间信息,像一个装饰者模式。

     

    在Calendar类中的这个毫秒数就是下面这个field。

    @SuppressWarnings("ProtectedField")
    protected long          time;


    Calendar的使用:

    Calendar本身是一个抽象类,不能直接实例化,但是Calendar类提供一个工厂方法,即getInstance来创建一个Calendar实例,通过setTime()设定一个Calendar内部的毫秒数,之后就可以对这个毫秒数进行分析,进而得到它的年月日信息。同时,我们也可以对Calendar直接设定年月日属性,从而获取对应的Date对象。

    需要注意的是,Calendar的一月是从0开始的,即你设定月份为4时,其实是五月。

    下面是一个Calendar的简单示例。

    Date now = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(now);
    calendar.get(Calendar.YEAR);
    System.out.println("the year is "+calendar.get(Calendar.YEAR));
    System.out.println("the month is "+calendar.get(Calendar.MONTH));
    calendar.set(Calendar.YEAR, 2014);
    calendar.set(Calendar.MONTH, 2);
    calendar.set(Calendar.DAY_OF_MONTH, 12);
    System.out.println("calendar date is "+calendar.getTime());


    输出:

    the year is 2016

    the month is 9

    calendar date is Wed Mar 12 22:17:50 CST 2014

     

    在讲到Calendar就不可避免的涉及到java的国际化问题和时区的问题。

    1) 国际化

    Locale 表示地区,每一个Locale对象都代表了一个特定的地理、政治和文化地区。

    你可以用如下代码看看你的系统默认地区。

    Locale locale = Locale.getDefault();
    locale.getCountry();
    locale.getLanguage();
    System.out.println("default locale is "+locale);
    System.out.println("default country is "+locale.getCountry());
    System.out.println("default language is "+locale.getLanguage());
    

    比如我这里的输出就是:

    default locale is zh_CN

    default country is CN

    default language is zh

    说明了我所在的国家时CN,语言是zh

     

    (2) 时区

    java中用java.util.TimeZone类来表示一个时区。每一个时区都一个id,可以利用TimeZone.getAvailableIDs()这个方法获取所有的id

    你可以试试利用如下代码看看你的系统默认时区。

    TimeZone timeZone = TimeZone.getDefault();
    System.out.println("default time zone is "+ timeZone.getDisplayName());

    本文的默认时区是

    default time zone is 中国标准时间


    3 Calendar的工厂构造方法

    前面说到,Calendar是一个抽象类,提供了static的工厂构造方法来提供一个实例。

    Calendar有多个的工厂构造方法:

    public static Calendar getInstance()
    {
        return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
    }
    public static Calendar getInstance(Locale aLocale)
    {
        return createCalendar(TimeZone.getDefault(), aLocale);
    }
    public static Calendar getInstance(TimeZone zone, Locale aLocale)
    {
        return createCalendar(zone, aLocale);
    }

    从上面的代码看出,Calendar的实例构造最终都是调用了这个方法

    private static Calendar createCalendar(TimeZone zone, Locale aLocale)

    这个方法接收两个参数,一个是时区,一个是地区。这个方法中通过对地区的判定返回不同的Calendar的子类(实现类),由于涉及到一些地区的问题,本文不做深究。

     

    当我们有了Calendar的实例后,就可以对Date对象进行分析,提取出对应的年月日;也可以通过设定对应的年月日从而获取对应的Date对象。

     

     三 DateFormat类

    1 DateFormat类的作用

    DateFormat用来在Date对象和字符串之间进行转化

    比如,我有一个date,想转成20131201日这种样式,或者想从2013-12-01这个字符串转成一个date对象,都可以利用DateFormat类。

     

    2 DateFormat类的结构

    DateFormat本身是一个抽象类,但是定义好了所有的方法,我们一般都是使用它的子类SimpleDateFormat,这也是一个标准的模板模式(template pattern)。

    DateFormat中定义了众多的方法,最重要的就是parse()format(),这两个方法一个是将字符串转成Date对象,一个是将Date对象按照指定的模式进行转换字符串。

     

    利用DateFormat进行转换

    DateFormat虽然是个抽象类,我们在日常中可以使用它的子类SimpleDateFormat类,但DateFormat还是提供了一些static方法构建DateFormat实例,进行简单的转换日期功能。

    DateFormat提供的转换格式分为两种,一种是只转换Date部分,一种是转换Date和Time两个部分。

     

    先看只转换Date部分的,从代码中能看出,你可以调用getDateInstance()这个系列方法,最后其实调用的都是get方法。

    这个系列主要需要注意的两个参数就是style参数和Locale参数。这个style参数,这个参数决定了你的日期格式的长度,默认的的default2,从DateFormat类中定义了几个常数,这个2就是medium,也可以设置为LONG。而最后一个参数就是地区了,决定了你的日期输出语言,中文就是年月日,英文就是单词了,我下面用一个例子说明不同参数的区别。

    DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.SIMPLIFIED_CHINESE);
    DateFormat format2 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);
    DateFormat format3 = DateFormat.getDateInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE);
    
    DateFormat format4 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ENGLISH);
    DateFormat format5 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
    DateFormat format6 = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH);
    
    try {
        System.out.println("format : " +format.format(new Date()));
        System.out.println("format2 : "+format2.format(new Date()));
        System.out.println("format3 : "+format3.format(new Date()));
        System.out.println("format4 : "+format4.format(new Date()));
        System.out.println("format5 : "+format5.format(new Date()));
        System.out.println("format6 : "+format6.format(new Date()));
    
    
    } catch (Exception e) {
        e.printStackTrace();
    }

    输出:

    format : 16-11-2

    format2 : 2016-11-2

    format3 : 2016112

    format4 : 11/2/16

    format5 : Nov 2, 2016

    format6 : November 2, 2016

     

    上面的例子,对构造DateFormat的地区和style参数就进行了说明,可以看出当style参数设为SHORT时,中英文的日期表示也是不一样的。

     

    再说说DateFormat的转换日期和时间格式,即转换的Date对象同时包含日期和时间数据。这也是一个系列的方法,与上面说的getDateInstance()系列类似。

    与只转换日期格式的Date有个重要的地方就是这里有两个sytle,一个是日期style,一个是时间style,可以根据自己的需要自由组合日期和时间style

    我这里就不说了,有兴趣可以去看看源码。

    public final static DateFormat getDateTimeInstance()
    {
        return get(DEFAULT, DEFAULT, 3, Locale.getDefault(Locale.Category.FORMAT));
    }
    public final static DateFormat getDateTimeInstance(int dateStyle,  int timeStyle)
    {
        return get(timeStyle, dateStyle, 3, Locale.getDefault(Locale.Category.FORMAT));
    }
    public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
    {
        return get(timeStyle, dateStyle, 3, aLocale);
    }
    


    四 SimpleDateFormat

    1 SimpleDateFormat使用

    其实这个SimpleDateFormat类是我们日常转换字符串和Date对象最常用的类。

    我们如果用DateFormat进行转换格式,只能用它规定的几种格式进行转换,非常的不直观,从字面我们看不出来从Date转出来的日期是怎样的格式。

    但是如果用SimpleDateFormat就不一样了,在构造SimpleDateFormat我们可以直接传一个pattern,只要pattern符合要求且是合理的,就可以对Date和字符串进行转换了。

    这个其实不用多说,只要来一个例子就都明白了,这里有一个坑,就是mM是不一样的,m是分钟(minute),而M是月份,用的时候一定要注意。

    String dateString = "2013-02-12T12:22:33";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
    System.out.println("simpleDate format " + simpleDateFormat.format(new Date()));
    try {
        System.out.println("simpleDate parse "+ simpleDateFormat.parse(dateString));
    } catch (ParseException e) {
        e.printStackTrace();
    }

    输出:

    simpleDate format 2016-11-02T09:19:58

    simpleDate parse Tue Feb 12 00:22:33 CST 2013

     

    还有就是当parse时,只有你的字符串和SimpleDateFormatpattern完全匹配才能识别,否则报错。

     

    总结:

    当我们只需要一个日期时,或从系统取得,或从数据库查询,都可以放入一个Date对象。

    当我们需要对Date进行详细分析,获取其中的年月日分秒各个部分的信息,用Calendar类。

    当我们需要对一个字符串转成Date对象,或者想让一个Date对象按照我们预期的格式进行输出字符串时,需要用DateFormat或它的子类SimpleDateFormat。

    展开全文
  • Java Date 时间类型的操作

    万次阅读 2017-09-30 17:36:38
    本文主要介绍Java Date 日期类型,以及Calendar的怎么获取时间,然后写成时间工具类里面有下面这些方法: - 时间转字符串(有默认时间格式,带时间格式) - 字符串转时间(有默认时间格式,带时间格式) - ...

    本文主要介绍Java Date 日期类型,以及Calendar的怎么获取时间,然后写成时间工具类里面有下面这些方法:
    - 时间转字符串(有默认时间格式,带时间格式)
    - 字符串转时间(有默认时间格式,带时间格式)
    - 计算两个日期之间相差的天数
    - 计算当前时间多少天以后的日期
    - 判断是否是日期格式

    代码

    很多说明都注释在代码上:

    package datedemo;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.regex.Pattern;
    /**
     * 日期工具
     */
    public class DateUtil {
        private final static String A="yyyy-MM-dd";//日期格式
        private final static String B="yyyy-MM-dd HH:mm:ss";//日期格式
        private final static String C="yyyy/MM/dd HH:mm:ss";//日期格式
        private final static String exp="((^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(10|12|0?[13578])([-\\/\\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(11|0?[469])([-\\/\\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(0?2)([-\\/\\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([3579][26]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$))";
        /**
         * 时间类型转字符串 固定返回 日期为 yyyy-MM-dd
         * @param date
         * @return String
         */
        public static String getDateToString(Date date) throws Exception{
            String s;
            SimpleDateFormat sft=new SimpleDateFormat(A);//格式时间对象
            s=sft.format(date);
            return s;
        }
    
        /**
         * 时间类型转字符串 不固定日期格式
         * @param date
         * @param format
         * @return String
         */
        public static String getDteToString (Date date,String format) throws Exception{
            String s;
            SimpleDateFormat sft=new SimpleDateFormat(format);//格式时间对象
            s=sft.format(date);
            return s;
        }
    
        /**
         * 字符串时间转时间类型 固定日期格式 yyyy-MM-dd
         * @param text 字符串时间
         * @return Date
         * @throws Exception
         */
        public static Date getStringToDate(String text) throws Exception{
            SimpleDateFormat sdf = new SimpleDateFormat(A);//格式时间对象
            Date date = sdf.parse(text);
            return date;
        }
    
        /**
         * 字符串时间转时间类型 不固定时间格式
         * @param text 时间字符串
         * @param format 日期格式
         * @return Date
         * @throws Exception
         */
        public static Date gettringToDate(String text,String format) throws Exception{
            SimpleDateFormat sdf=new SimpleDateFormat(format);//格式时间对象
            Date date=sdf.parse(text);
            return date;
        }
    
        /**
         *计算两个日期之间相差的天数
         * @param a 第一个日期时间
         * @param b 第二个日期时间
         * @return
         * @throws Exception
         */
        public static long getDaysBetweenTwoDates(Date a, Date b) throws Exception {
            //判断这两个时间的大小
            if(a.equals(b)) return 0;
            if(!a.before(b)){//保证返回的值为正数
                Date temp;
                temp=a;
                a=b;
                b=temp;
            }
            Calendar c = Calendar.getInstance();//获取calendar对像
            c.setTime(a);//设置时间 date  转 calendar 类型
            long t1 = c.getTimeInMillis();//获取时间戳
            c.setTime(b);
            long t2 = c.getTimeInMillis();
            //计算天数
            long days = (t2 - t1) / (24 * 60 * 60 * 1000);
            return days;
        }
    
        /**
         * 计算当前时间多少天以后的日期
         * @param currentDate 当前时间
         * @param distance 距离多少天
         * @return
         */
        public static Date getNextDasByNumber(Date currentDate,int distance)throws Exception{
            Calendar calendar=Calendar.getInstance();//获取日历对象
            calendar.setTime(currentDate);//设置当前时间 date  转 calendar 类型
            calendar.add(Calendar.DATE,distance);//计算离当前时间以后的日期
            Date date=calendar.getTime();//calendar 转 date  类型
            return date;
        }
    
        /**
         * 判断是否是日期格式
         * @param date  字符串
         * @return
         */
        public static boolean isDate(String date){
           // 创建 Pattern 对象 java正则表达式对象
            Pattern r = Pattern.compile(exp);
            boolean flag =  r.matcher(date).matches();//判断它格式是否正确
            return flag;
        }
    
        public static void main(String []arg){
            Calendar calendar=Calendar.getInstance();
            try {
                //验证计算两个日期之间相差的天数
                long i= getDaysBetweenTwoDates(getStringToDate("2017-02-11"),getStringToDate("2017-03-11"));
                System.out.println("计算(2017-02-11,2017-03-11)两个日期之间相差的天数:"+i);
    
                Date d= getNextDasByNumber(getStringToDate("2017-02-11"),28);
                System.out.println("计算(2017-02-11)时间128天以后的日期:"+getDateToString(d));
                boolean f= isDate("2017-02-11");
                System.out.println("判断2017-02-11日期格式是否正确:"+f);
                boolean f1= isDate("20170211");//正则表达式不支持这种
                System.out.println("判断20170211日期格式是否正确:"+f1);
                boolean f2= isDate("2017/02/11");
                System.out.println("判断2017/02/11日期格式是否正确:"+f2);
                System.out.println();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    结果

    这里写图片描述

    总结

    Calendar比Java原有的Date更加强大些,它们之间也可以相互转换 ,不过用Calendar,小心获取月份时,它是阴历–得加一才是我们正常的月份;
    就说这么多了,都是干货哈!!!,大家有不明白的或者有新的需求都可提出来,一起讨论讨论;
    下次我还想实现一个人在某年的工作总时间和日期功能,还在纠结中。。。。。。。。。。。。。。。。。。

    展开全文
  • java Date 和 javascript Date

    千次阅读 2014-12-16 21:22:01
    Java中的date转换成js中的date出错!

    最近写一个页面,上面要展示下日期。在Java中生成了Date,然后将这个Date通过velocity送入vm模板当中

    代码如下:

    var dates = new Date("$!{pp.date}");
    var dateStr = date2String(dates);

    其中 date2String是这样的,函数参考

    http://www.w3school.com.cn/jsref/jsref_obj_date.asp


    function date2String(date) {
    	var year = date.getFullYear();
    	var month = date.getMonth();
    	var day = date.getDate();
    	var hour = date.getHours();
    	var minute = date.getMinutes();
    	var second = date.getSeconds();
    	var monthStr = (month <= 9 ? "0":"") + month;
    	var dayStr = (day <= 9 ? "0":"") + day;
    	var hourStr = (hour <= 9 ? "0":"") + hour;
    	var minuteStr = (minute <= 9 ? "0":"") + minute;
    	var secondStr = (second <= 9 ? "0":"") + second;
    		
    	return ""+year+"-"+monthStr+"-"+dayStr+"  "+hourStr+":"+minuteStr+":"+secondStr;
    }

    结果解析发现时间全乱了!

    首先是月份不对,这个是一个自己粗心的bug,因为getMonth得到的结果是0-11的,因此需要在后面+1,这个比较容易搞定

    后面的并没有因为少1的原因而变形。

    现在有两种方案:其一,直接传递一个Java修改好格式后的字符串给js,其二想想别的办法。

    本来想偷懒的就用其一吧。但是想了想还是其二更能偷懒,而且还能学到新东西,用其二吧。


    想了想直接将Date对象传递过来可能在实现上确实比较诡异。Date应该都是从1970年开始时的时间差,因此用一个long做构造函数的参数应该是有的。当然在上面的

    中文w3c的网页上只给出了一种构造方法,即取得当前的时间。


    连前面的直接赋值date的都没有事,因此觉得应该有别的构造函数,因此选择再找找看,查看下Date的构造函数:

    http://www.tutorialspoint.com/javascript/javascript_date_object.htm


    new Date(milliseconds)

    靠谱一点,毕竟是存放在底层的数据。

    因此改成:

    var dates = new Date($!{pp.date.getTime()});

    靠谱多啦。搞定,看看原来的为啥这么不靠谱。 

    原来传递进去的Date是:

    date=Sun Dec 14 09:40:11 CST 2014
    date=Sat Dec 13 23:54:00 CST 2014

    但是:

    变成了     2014-12-14 23:40:11

    和  2014-12-14 13:54:00

    都是增加了14个小时!

    打印后发现:

    dates=Sun Dec 14 2014 13:54:00 GMT+0800

    dates=Sun Dec 14 2014 23:40:11 GMT+0800

    那么就是时区的问题了!

    根据 Wiki 上面的CST :


    http://zh.wikipedia.org/wiki/CST


    除了表示中国,还可以表示澳洲和美国中部时间。应该是美国中部时间比较靠谱,咱们在东8区, 那么美国中部应该是在西6区。

    查看下果不其然。


    因此js是把CST当成了美国中部时间(Central Standard Time (North America))而不是(China Standard Time)。

    从而导致对应的错误。折腾了一下还是能找到原因的哈哈。加油。


    ======

    PS。还是要细心啊,不能老出问题了才发现问题然后去补救。测试的时候一定要细心。







    展开全文
  • java Date获取 年月日时分秒

    千次阅读 2017-12-18 13:44:57
    转自 : ... java Date获取 年月日时分秒 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
  • Java基础:Java Date数据类型

    千次阅读 2018-08-14 20:06:26
    Java数据类型中Date数据类型在处理一些日常应用问题常常被人们使用。  然而在使用过程中许多人却没有真正的去了解有关于Java 数据类型中Date数据类型。  通常在这使用某一种数据类型过程中并不一定就会有哦相应...
  • JAVA DATE类型数据比较判断大小方法

    万次阅读 2014-08-28 12:14:13
    JAVA DATE类型数据比较判断大小方法
  • Java Date类型与Date字符串 互相转换

    千次阅读 2019-04-30 16:08:13
    DateDateString Date date = new Date(); //可以转成你想要的格式 yyyy/MM/dd HH:mm:ss 等等 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = format.format(date...
  • java Date类型:24小时制和12小时制

    千次阅读 2018-05-12 15:03:31
    java Date类型:24小时制和12小时制2011年12月14日 13:35:55阅读数:15080String getTimestamp() {DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss sss");Date date = new Date();return df....
  • java Date类型 空值处理

    千次阅读 2020-07-11 22:54:08
    问题描述:在做一个Excel文件导入导出的功能时,Excel的一个日期的字段是空值,而我对应的java bean 对应的属性是一个date类型,直接赋值会报错 解决方法(待改进): 我在set进java bean之前进行了判断看传过来的...
  • Java Date类加减天数常遇到的问题

    千次阅读 2015-03-19 17:14:44
    Java Date 加减日期常遇到的问题
  • java Date函数总结

    千次阅读 2014-07-28 11:13:32
    java.util.Datejava时间接口,已知的实现类包括Date,Time,TimeStamp  Calendar calendar=Calendar.getInstance();  DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date dateA=new Date...
  • Java Date 和 Calendar 实例

    万次阅读 2012-03-07 11:32:36
    JavaDate 和 Calendar 实例package com.homer.learn; import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util....import java.util.Date; imp
  • Java Date 和 Calendar

    万次阅读 2012-03-02 22:30:19
    Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算未来的日期,定制日期的显示格式,并将...
  • java Date 改变时分秒

    千次阅读 2019-07-09 13:11:05
    Date now = new Date(); Calendar cal1 = Calendar.getInstance(); cal1.setTime(now); // 将时分秒,毫秒域清零 cal1.set(Calendar.HOUR_OF_DAY, 23); cal1.set(Calendar.M...
  • java Date日期去掉时分秒

    千次阅读 2020-04-02 14:36:27
    做一个简单的需求,就是把数据库里取到的内容按照天分组,然后再传到页面上。 因为数据库里面存的是完整的日期,所以需要把日期转成整天,然后再去作比较。 结果百度一下答案都是: ...Date date = s...
  • java date 比较时间

    千次阅读 2013-11-11 10:35:38
    比较两个时间,不用自己写date.getTime()然后相减,java有提供给我们这个方法-compareTo; 两个Date类型的变量可以通过compareTo方法来比较。此方法的描述是这样的: 如果参数 Date 等于此 Date,则返回值 0;...
  • java Date 日期格式化

    千次阅读 2019-08-28 20:53:27
    今天来整理一下java中的日期类 1 时间原点的概念 八种基本数据类型包括字符串最终都可以以数字的方式表现出来(数据就是二进制,而二进制是可以转换成10进制的) 日期类型类似,2022年1,1,也可以用一个数字来代替 ...
  • java date int 转换

    万次阅读 2016-06-02 17:25:41
    date 转 int : long nowTime = System.currentTimeMillis()/1000; Integer nowTimeInt = new Long(nowTime).intValue(); int 转 date: long nowTimeLong=new Long(nowTimeInt).longValue
  • java.util.Date的创建 java.util.Date这个类可能是我们最常用的一个用来表示日期的类了。我们可以像下面这样初始化一个实例来表示当前日期和时间: java.util.Date date = new java.util.Date();Date类中有一个...
  • Java Date toString()方法与示例

    千次阅读 2020-07-22 09:34:34
    日期类toString()方法 (Date Class toString() method) toString() method is available in java.util package. toString()方法在java.util包中可用。 toString() method is for string denotation of this Date ...
  • javaDate 计算时间差

    千次阅读 2018-10-08 12:27:05
    public static String getDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; // long ns = 1000; // 获得两个时间的毫秒时间差异 .....
  • java Date时间的各种转换方式

    千次阅读 2019-01-19 12:46:09
    java各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Date(); // 一、获取当前系统时间和日期并格式化输出: SimpleDateFormat df = new Simp...
  • javaDate和String之间的转换 /** *程序1 *将date转换成String *得到像 2018-11-26 这种格式的日期字符串 */ public static String gainDate(Date date){  SimpleDateFormat sdf=new SimpleDateFormat("...
  • Java Date类获取当前年月日

    千次阅读 2020-11-18 23:26:33
    文章目录一、代码实现 一、代码实现 SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间 sdf.applyPattern("yyyy-MM-dd ...Date date = new Date();// 获取当前时间 String data=sdf.format(date); ...
  • java Date与 double 互转

    千次阅读 2018-12-22 16:52:55
    /** * 时间转double * @param date * @return 返回值类似:43322.3770190278 ... public static double Date2Double(Date date){ @SuppressWarnings("deprecation") long localOffset = date.get...
  • Java Date before和after 的使用

    千次阅读 2019-12-25 15:23:06
    1、date1.after(date),当date1大于date2时,返回true,当小于等于时,返回false; 2、date1.before(date),当date1小于date2时,返回true,当大于等于时,返回false; 3、若要校验date2必须比date1小,且不能相等时...
  • java.sql.Date是在JDBC中使用的日期类,在JDBC操作中...实际上java.sql.Date继承自java.util.Date,是java.util.Date的一个子类,所以java.util.Date可以调用的方法在java.sql.Date中也可以调用。 创建一个java.sql.Da

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,773
精华内容 37,509
关键字:

javadate

java 订阅