精华内容
下载资源
问答
  • Java 向数据库中输入datetime类型数据 Java 可以使用jdbc访问数据库,我们通常使用的时间是java.utils.Date。后来尝试使用java.sql.Date数据库中写入时间,发现了一个问题,这些写入的时间,无一例外的没有后面的...

    Java 向数据库中输入datetime类型数据

    Java 可以使用jdbc访问数据库,我们通常使用的时间是java.utils.Date。后来尝试使用java.sql.Date朝数据库中写入时间,发现了一个问题,这些写入的时间,无一例外的没有后面的小时等信息,只有年-月-日

    java.sql.Date只表示数据库中日期的部分如果想向数据库中写入完整的时间,如2016-12-11 17:10:25.000 则需要使用java.sql.Timestamp这个类。

    下面,我给大家介绍下两种东西的使用方法

    字符串和java.utils.Date相互转换

    我们使用DateFormat 类来进行String和Date的转换,而java.utils.Date是我们在java编程中经常使用的。

    字符串转化为Date类型

    public void getDateTime() throws ParseException{
            String str = "2016-12-11 17:17:10"; //字符串格式的时间
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
            java.util.Date date = dateFormat.parse(str);  //str 转 Date
            System.out.println("Time of Date type:"+date);
        }

     

    Date类型转化为字符串

            //Date类型转字符串
        public void getCurrentStrTime(){
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");   // 这里填写的是想要进行转换的时间格式
            java.util.Date date = new java.util.Date();      // 获取当前时间
            String str = dateFormat.format(date);  //Date 转换为 str
            System.out.println("Time of String type: "+str);
        }        

     

     

    Java.sql.Date向数据库写入日期(年-月-日)

    这里就需要java.sql.Date和java.utils.Date进行相互转换了,这个转换一般比较容易,利用构造方法和.getTime() 方法进行转化。

    java.utils.Date date = new java.utils.Date();   // 获取当前时间
    java.sql.Date sql_date = new java.sql.Date(date.getTime()); //转换成java.sql.Date
    接着使用PreparedStatement 向数据库中写入时间,即可。
    
    ps.setDate(1, new java.sql.Date(date.getTime()));   // 设置项

    Java.sql.Timestamp向数据库中写入时间(年-月-日  时:分:秒)

    需要注意的是,上边一种方法只能将日期写入到数据库中,为了能够将时间精确到s甚至是ms。我们需要使用java.sql.Timestamp 类型。 
    java.sql.Timestamp 类型的构造函数也可以使用Long进行初始化
    
    Date date = new Date();  
    Timestamp timeStamp = new Timestamp(date.getTime());  
     
    
    故在生成java.utils.Date时,将时间精确到s,然后使用预编译语句执行SQL语句
    
    Date date = new Date();  
    Timestamp timeStamp = new Timestamp(date.getTime()); 
     sql= "insert into flowmeter2(total,std_flow,temp,press,time) values(?,?,?,?,?)";   
            try {  
                PreparedStatement ps = connection.prepareStatement(sql);  
                ps.setString(1, total);  
                ps.setString(2, std_flow);  
                ps.setString(3, temp);  
                ps.setString(4, press);  
                ps.setTimestamp(5, timeStamp);  
                ps.executeUpdate();  
                System.out.println("添加成功!");  
                connection.close();  
    便可以将时间精确到ms级

     

    转载于:https://www.cnblogs.com/Thomas-blog/p/9277124.html

    展开全文
  • 发现date类型是可以正常匹配的,这是因为如果用datetime类型匹配如果不将日期填写到秒钟mysql将会自动填充剩余的数据为00:00:00,并且只对这个时间进行判断所以datetime=2017-11-01 13:52:26时候用2017-11-01去查询...

    我们发现datetime这个字段日期为2017/11/01却不包含在判断条件之中,这是为什么呢,我们再做一组实验


    发现date类型是可以正常匹配的,这是因为如果用datetime类型匹配如果不将日期填写到秒钟mysql将会自动填充剩余的数据为00:00:00,并且只对这个时间进行判断所以datetime=2017-11-01 13:52:26时候用2017-11-01去查询当然查不出来了

    展开全文
  • 在设计数据库和java类的时候经常用到Date类型,数据库的CREATE_TIME字段用varchar类型还是String类型?刚入门的人总会感觉String更好用,因为截取就行了,而且数据库和java类之间无缝衔接,反正传过取是什么就存什么...

           在设计数据库和java类的时候经常用到Date类型,数据库的CREATE_TIME字段用varchar类型还是String类型?刚入门的人总会感觉String更好用,因为截取就行了,而且数据库和java类之间无缝衔接,反正传过取是什么就存什么,不需要担心其他的,只要管好在java代码中生成的时间信息并转化成String就万事大吉了。

         但实际上正规的还是用Date来存储,因为String类型如果出现空值,截取的时候回报错,而且在其他处理时间值的类型上还要转来转去,经常看到说针对sql使用java.sql.Date,不针对sql写java.util.Date,但并不准确,java中有java.util.Date和java.sql.Date两种类型,前者存储日期+时间,后者存储时间,如果业务需要存储日期和时间的信息,Java类中可以用java.util.Date,数据库端用datetime类型而不是date,同时mybatis中的jdbcType要写成TIMESTAMP类型,就可以java类和数据库都保持日期+时间形式的存储,否则很容易造成时间部分信息丢失情况,

          如果是只需要时间信息,java类中用java.sql.Date类型,数据库用date类型,jdbcType也是DATE类型就可以,总结来说就是

    java.util.Date + TIMESTAMP + dateTime

    java.sql.Date + DATE +date

    展开全文
  • Java、数据库DateDateTime详解

    千次阅读 2019-07-27 17:13:34
    1、java.sql.Date和java.util.Date区别及使用 可见这三个类都是java.utl.Date的子类。 java.sql.Date就是与数据库Date相对应的一个类型(数据库操作),而java.util.Date是纯java的Date。 详细查看java.sql....

    1、java.sql.Date和java.util.Date区别及使用

    可见这三个类都是java.utl.Date的子类。

    java.sql.Date就是与数据库Date相对应的一个类型(数据库操作),而java.util.Date是纯java的Date。

    详细查看java.sql.Date类:

    一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。

    为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。 

    import java.text.SimpleDateFormat;
    
    public class Test {
    
    	public static void main(String[] args) throws Exception {
    
    		java.util.Date nowUtil = new java.util.Date(); // java.util.Date
    		java.sql.Date nowSql = new java.sql.Date(System.currentTimeMillis());// java.sql.Date
    		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		System.out.println(format.format(nowUtil));// 格式化 输出
    		System.out.println(format.format(nowSql));// 格式化 输出
    		System.out.println(nowUtil); // 直接 输出
    		System.out.println(nowSql); // 直接 输出
    	}
    }

    代码输出结果:

    2019-07-28 12:00:16
    2019-07-28 12:00:16
    Sun Jul 28 12:00:16 CST 2019
    2019-07-28 

    日期格式

    “规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被截取

    也就是说,如果你是 2017-09-17 15:15:25 这样的时间点存取数据,那么存在数据库中的值就是:2017-09-17 00:00:00

    类型转换

    那么如果把java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,我们java.sql.Date一般由java.util.Date转换过来,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
    显然,这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值,
    我们需要利用java.sql.Timestamp.

    而java.util.Date 与 java.sql.Date的转换:

    设sqltime是java.sql.Date类型对象、utiltime是java.util.Date类型对象

    (1)java.util.Date 转 java.sql.Date:

    这也就是下转型,需要造型,但是由于时间格式不一样,需要以毫秒的形式进行转换:

    java.sql.Date s = new java.sql.Date(util.getTime());

     (2)java.sql.Date 转 java.util.Date: 

    这是上转型,会自动转换:

    java.util.Date u = sqltime;

    也如:

    java.sql.Date s = new java.sql.Date(new Date().getTime()); 注意,new Date();是java.util.Date类型
    
    java.util.Date u = s;
    

    2、Date,DateTime,String等日期格式的相互转化 

    日期之间的转化关系:

    (1)获取当前系统时间
    Date date = new Date();

    (2)Date转为DateTime
    DateTime dateTime = new DateTime(date.getTime());

    (3)DateTime转为Date
    Date date = dateTime.toDate();

    (4)获取日期格式
       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    (5)Date转换为String类型格式
       String dateStr = df.format(new Date());

    3、获取当前时间

    (1)获取当前时间(日期+时间)

    获得系统当前时间(date类型)
    Date date = new Date();
    //转换成指定格式的字符串(String类型)
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
    String currentTime = sdf.format(date);
    //当前系统时间:2015-09-09  16:08:33(String类型)
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String currentTime = sdf.format(new Date());

    获得系统当前时间(date类型)
    Date date = new Date();
    或者
    java.util.Date date = new java.util.Date();
    转换成指定格式的字符串(String类型)
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
    或者
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String currentTime = sdf.format(date);

    (2)获取当前日期

    //获得系统当前日期(date类型)
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdf.parse(sdf.format(new Date()));
    //获得系统当前日期(String类型)
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    String currentTime = sdf.format(new Date());
    

    4、格式转换常用方法 

    /*
     * 返回当前日期时间字符串
     * 默认格式:yyyy-mm-dd hh:mm:ss
     * @return String 返回当前字符串型日期时间
     */
    public static String getCurrentTime() {
        String dateStr = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 返回当前日期时间字符串
     * 默认格式:yyyymmddhhmmss
     * @return String 返回当前字符串型日期时间
     */
    public static BigDecimal getCurrentTimeAsNumber() {
        String dateStr = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        dateStr = sdf.format(date);
        return new BigDecimal(dateStr);
    }
    
    /**
     * 返回自定义格式的当前日期时间字符串
     * @param format
     *            格式规则
     * @return String 返回当前字符串型日期时间
     */
    public static String getCurrentTime(String format) {
        String dateStr = null;
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = new Date();
        dateStr = sdf .format(date);
        return dateStr ;
    }
    /**
     * 返回当前字符串型日期
     * @return String 返回的字符串型日期
     */
    public static String getCurDate() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd");
        String strDate = simpledateformat.format(calendar.getTime());
        return strDate;
    }
    /**
     * 返回指定格式的字符型日期
     * @param date
     * @param formatString
     * @return
     */
    public static String Date2String(Date date, String formatString) {
        if (G4Utils.isEmpty(date)) {
            return null;
        }
        SimpleDateFormat simpledateformat = new SimpleDateFormat(formatString);
        String strDate = simpledateformat.format(date);
        return strDate;
    }
    /**
     * 返回当前字符串型日期
     * @param format
     *            格式规则
     * @return String 返回的字符串型日期
     */
    public static String getCurDate(String format) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat simpledateformat = new SimpleDateFormat(format);
        String strDate = simpledateformat.format(calendar.getTime());
        return strDate;
    }
    /**
     * 返回TimeStamp对象
     * @return
     */
    public static Timestamp getCurrentTimestamp() {
        Object obj = TypeCaseHelper.convert(getCurrentTime(), "Timestamp", "yyyy-MM-dd HH:mm:ss");
        if (obj != null)
            return (Timestamp) obj;
        else
            return null;
    }
    /**
     * 将字符串型日期转换为日期型
     * @param strDate
     *            字符串型日期
     * @param srcDateFormat
     *            源日期格式
     * @param dstDateFormat
     *            目标日期格式
     * @return Date 返回的util.Date型日期
     */
    public static Date stringToDate(String strDate, String srcDateFormat, String dstDateFormat) {
        Date rtDate = null;
        Date tmpDate = (new SimpleDateFormat(srcDateFormat)).parse(strDate, new ParsePosition(0));
        String tmpString = null;
        if (tmpDate != null)
            tmpString = (new SimpleDateFormat(dstDateFormat)).format(tmpDate);
        if (tmpString != null)
            rtDate = (new SimpleDateFormat(dstDateFormat)).parse(tmpString, new ParsePosition(0));
        return rtDate;
    }

     https://blog.csdn.net/jingsong2015/article/details/77714780

    MySQL中的date和datetime

    MySQL 的日期类型有5个,分别是: date、time、year、datetime、timestamp。 

    类型 字节 格式 用途 是否支持设置系统默认值 范围
    date 3 YYYY-MM-DD 日期值 不支持 1000-01-01/9999-12-31
    time 3 HH:MM:SS 时间值或持续时间 不支持 '-838:59:59'/'838:59:59'
    year 1 YYYY 年份 不支持 1901/2155
    datetime 8 YYYY-MM-DD HH:MM:SS 日期和时间混合值 不支持 1000-01-01 00:00:00/9999-12-31 23:59:59
    timestamp 4 YYYYMMDD HHMMSS 混合日期和时间,可作时间戳 支持

    1970-01-01 00:00:00/2038

    结束时间是第 2147483647 秒,

    北京时间 2038-1-19 11:14:07

    格林尼治时间 2038年1月19日 凌晨 03:14:07

    在Mysql数据库中日期跟时间的我知道有两种,一种是date类型,还有一种是datetime类型

    1、date

    date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期

    类型可用于需要一个日期值而不需要时间部分时。MySQL 以YYYY-MM-DD格式检索与显示date值。

    支持的范围则是:‘1000-01-01’ 到 ‘9999-12-31’

    2、datetime

    dateitme类型可用于需要同时包含日期和时间信息的值,不过是连在一起的。MySQL 以:YYYY-MM-DD HH:MM:SS

    格式检索与显示 datetime类型。支持的范围是:‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。

    (“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)

     

    使用这两行代码转换时间后,就可以往数据库插入”yyyy-MM-dd HH:mm:ss“类型.

    Timestamp对象也是继承了Date类 

    3、与java数据的交互

    java中的date(java.util.Date)将日期和时间都可以记下来,那么如果想在mysql中存储日期和时间,也就是用datetime,而在数据中应该如何对应呢?

    使用hibernate测试,发现当把mysql数据库中设置了datetime,反向工程生成的hbm.xml文件中,使用的是timestamp,如下:

    <property name="Publishdate" column="publishdate" type="timestamp" not-null="false" length="10" />

    反向生成javapojo时,生成的还是Date

    由此可见对于mysqldatetime,与java中的date,如果要使二者正确交互,中间要使用timestamp

    java.util.Date date = new java.util.Date();    // 获取一个Date对象
    /*或者*/Date date = new Date();
    Timestamp timeStamp = new Timestamp(date.getTime()); //将日期时间转换为数据库中的timestamp类型

    再用setTimestamp()设置数据库中的“日期+时间”。

    这样放入数据库的就是“yyyy-mm-dd hh:mm:ss”格式的数据。

    注意,mysql中如果使用date而不是datetime是保存不下“日期+时间”的,只能保存“时间”

    具体应用:

    PreparedStatement ps = conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    while(rs.next()){
    	Timestamp timestamp = rs.getTimestamp("action_time");
    	Date date = new Date(timestamp.getTime());
    	String dateStr = dateUtil.dateString(date);
    }
    
    import java.sql.Timestamp;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class DateUtil {
        //将Date转换成String
        public String dateString(Date date) {
    	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	    String dateStr = sdf.format(date);
    	    return dateStr;
        }
        //将Timestamp转换成String
        public String timeString(Timestamp timestamp) {
    	    Date date = new Date(timestamp.getTime());
    	    String dateStr = dateString(date);  
    	    return dateStr;
        }
    }
    

    date类型的错误

    1、java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp

    在使用MySql 时, 数据库中的字段类型是timestamp的,默认为0000-00-00, 会发生异常:java.sql.SQLException:   Value   '0000-00-00 '   can   not   be   represented   as   java.sql.Timestamp

     “0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的

    但 java.sql.Date 将其视为 不合法的值 格式不正确因此产生异常

    https://blog.csdn.net/zhuzj12345/article/details/84333672

    https://blog.csdn.net/demon7639/article/details/52540367

    https://blog.csdn.net/u010773667/article/details/51014306

    https://blog.csdn.net/QH_JAVA/article/details/48399711

    https://www.cnblogs.com/diffx/p/9994019.html

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 日期时间:DATETIME,TIMESTAMP ★日期格式转换 1、字符串转日期 select STR_TO_DATE('2013-01-29 13:49:18', '%Y-%m-%d %H:%i:%s') 2、日期转字符串 select DATE_FORMAT('2013-01-29 13:49:18', ...
  • 1.datetime类型用在需要同时包含日期时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示datetime值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59' 2.date类型用在你仅需要日期值时...
  • MySQL数据库中的Date DateTime TimeStampTime类型
  • 数据库中的Date,DateTime和TimeStamp类型 2008-01-18 09:37:02.0 ...DATETIME, DATE和TIMESTAMP类型是相关的。本文描述他们的特征,他们是如何类似的而又不同的。 DATETIME类型用在你需要同时包含日期和时间信...
  • date和datetime、timestamp 的区别 date保存精度到天,格式为:YYYY-MM-DD,如2016-11-07 datetime和timestamp精度保存到秒,格式为:YYYY-MM-DD HH:MM:SS,如:2016-11-07 10:58:27 因此如果只需保存到天的字段(如...
  • date 表示年月日,如YY-MM-DD ...datestamp 和datetime表示的信息相同,但时间范围不同 时间范围 date – > ‘1000-01-01’ to ‘9999-12-31’. datetime –> ‘1000-01-01 00:00:00’ to ‘9999-12-31 2...
  • 数据库中的Date,DateTime和TimeStamp类型&nbsp; 发布时间:2008.01.18 04:57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...DATETIME, DATE和TIMESTAMP类...
  • DATETIME类型用在你需要同时包含日期时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值, 支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59' (“支持”意味着尽管更早的值...
  • DATETIME类型用在你需要同时包含日期时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 770
精华内容 308
关键字:

数据库date和datetime