`

java和数据库时间类型

    博客分类:
  • java
阅读更多

表单提交过来,都是String类型,需要web框架来转换类型,比方说,时间类型的字符串,需要转换为java.util.Date类型。

 

java.util.Date的三种子类:java.sql下的DATE、TIME和TIMESTAMP

DATE:由日、月和年组成。

TIME:由小时、分钟和秒组成。 

TIMESTAMP:将DATE和TIME结合起来,并添加了纳秒域。

 

public static void main(String args[]) {
        java.util.Date a = new java.util.Date();
        System.out.println("java.util.Date:" + a);
        java.sql.Date b = new java.sql.Date(a.getTime());
        System.out.println("java.sql.Date:" + b);
        java.sql.Time c = new java.sql.Time(a.getTime());
        System.out.println("java.sql.Time:" + c);
        java.sql.Timestamp d = new java.sql.Timestamp(a.getTime());
        System.out.println("java.sql.Timestamp:" + d);
    }

结果


  

JAVA字符串转日期或日期转字符串

用的API是SimpleDateFormat,它是属于java.text.SimpleDateFormat。

用法: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

PS:为什么有的格式大写有的格式小写?为了避免混淆。

MM是月份,mm是分;HH是24小时制,而hh是12小时制。

1.字符串转日期 

2008-07-10 19:20:00 要把它转成日期,可以用Date date = sdf.parse("2008-07-10 19:20:00");

2.日期转字符串 

假如把今天的日期转成字符串可用 String str = sdf.format(new Date());

这个字符串内容的格式类似2008-07-10 19:20:00

透过这个API我们便可以随心所欲的将日期转成我们想要的字符串格式,

例如希望将日期输出成2008年7月10日,我们可以这么写:

SimpleDateFormat sdf =   new SimpleDateFormat("yyyy年MM月dd日");

String str = sdf.format(new Date());

 

DateUtils时间类

import java.util.Date;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;

public class random {

    private static String format(Date date) {
        return DateFormatUtils.ISO_DATETIME_FORMAT.format(date);
    }
    public static void main(String[] args) {
        int amount = 2;
        Date date = new Date();
        System.out.println(format(date));
        System.out.println("增加amount年:" + format(DateUtils.addYears(date, amount)));
        System.out.println("增加amount月:" + format(DateUtils.addMonths(date, amount)));
        System.out.println("增加amount日:" + format(DateUtils.addDays(date, amount)));
        System.out.println("增加amount时:" + format(DateUtils.addHours(date, amount)));
        System.out.println("增加amount钟:" + format(DateUtils.addMinutes(date, amount)));
        System.out.println("增加amount秒:" + format(DateUtils.addSeconds(date, amount)));
        System.out.println("增加amount毫秒:" + format(DateUtils.addMilliseconds(date, amount)));
        System.out.println("增加amount星期:" + format(DateUtils.addWeeks(date, amount)));
        System.out.println("比较两个日期对象的日期部分是否相等:" + DateUtils.isSameDay(date, new Date()));
        System.out.println("比较两个日期对象是否完全相等,精确到毫秒:"+DateUtils.isSameInstant(date, new Date()));
    }
}
结果:

 Calendar

public class random {

    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int date = c.get(Calendar.DATE);
        System.out.println("今天是" + year + "年" + month + "月" + date + "日");
        System.out.println("是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");
        System.out.println("c.getTime()的结果: " + c.getTime());
        System.out.println("new Date()的结果: " + new Date());
        c.set(Calendar.DAY_OF_YEAR, 30);
        System.out.println("2015年的第30天是" + c.getTime());
        System.out.println("两天后的结果:" + getDateAfter(new Date(), 2));
        System.out.println("两天前的结果:" + getDateBefore(new Date(), 2));
    }

    public static Date getDateBefore(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
        return now.getTime();
    }

    public static Date getDateAfter(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE, now.get(Calendar.DATE) + day);
        return now.getTime();
    }
} 
结果:
注意:int month=c.get(Calendar.MONTH)+1哦,好像系统是从0开始计月份,到了12月就归零了。所以单独取月份时,要在后面加一才能得到当前的月份。
Calendar和Date的转化
 
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
 
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
系统当前时间精确到分
Date now=new Date();
Calendar cal1 = Calendar.getInstance(); 
cal1.setTime(now); 
cal1.set(Calendar.SECOND, 0); 
now = cal1.getTime();
System.out.println(now);
 

比方说要查询截止日22号的,必须把22号的所有询价单都查出来。

方案一  把数据库字段转成to_char,然后只比较年月日,这样可以把当天的所有记录都查出来。

<![CDATA[to_char(i.con_to_account_date,'yyyy-mm-dd') >= to_char(#{expiringDateBegin},'yyyy-mm-dd') and to_char(i.con_to_account_date,'yyyy-mm-dd') <= to_char(#{expiringDateEnd},'yyyy-mm-dd')]]>

这样会走全表扫描。

 

方案二:

把页面精确到天java.util.Date的附加上23:59:59,直接比较数据库时间。

String date="2015-1-22";

Date dates = DateUtil.parseStdDate(date);

int amount=1;

Date dates1 =DateUtils.addDays(dates, amount);  //加一天

Date dates2 =DateUtils.addSeconds(dates1,-1);   //减一秒

System.out.println(DateUtil.formateDatetime(dates2))

 

数据库时间类型

 mysql(版本:5.1.50)的时间日期类型如下:

datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59

timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到2038

date 3bytes xxxx-xx-xx 1000-01-01到9999-12-31

year 1bytes xxxx 1901到2155

time 3bytes xx:xx:xx -838:59:59到838:59:59(为了满足时间的加减运算)

------------------------------------------------------------------------

java(1.6) 中能保存时间日期类型的类主要有

java.util.Date

java.util.Calendar

java.sql.Date

java.sql.Time

java.sql.Timestamp

 

java提供与mysql方便交互的三种数据类型

java.sql.Date

java.sql.Time

java.sql.Timestamp

它们都是继承java.util.Date,算是对该类的精简,很适合跟数据库交互。

 

===========java注入数据库==========

java类型   mysql类型        成功与否

date         date               yes

date         time               no

date         timestamp       no

date         datetime         no

 

time         date               no

time         time               yes

time         timestamp       no

time         datetime         no

 

timestamp date              yes

timestamp time              yes

timestamp timestamp     yes

timestamp datetime        yes

==========end java注入数据库========

总规律,如果A完全包含B,则A可以向B注入数据,否则报错

 

==========从数据库提取到java ==========

mysql类型    java类型     成与否

date             date         yes

date             time         yes --------------缺少的部分使用历元

date           timestamp   yes --------------缺少的部分使用历元 

 

time           date           yes --------------缺少的部分使用历元

time           time           yes

time          timestamp    yes --------------缺少的部分使用历元

 

timestamp date           yes

timestamp time           yes

timestamp timestamp   yes

 

datetime      date         yes

datetime      time         yes

datetime    timestamp   yes

==========end 从数据库提取到java=======

不会出错,缺少的部分使用历元,而不是当前日期时间

 

以前从mysql中查询出来的时间日期类型,都放在java.util.Date类型里面了。

这样带来一系列的问题,首先这个类提供的时间操作函数太少,一般都需要转换成java.util.Calendar再去操作;

其次即使使用了java.util.Calendar,也不是很方便,一个很简单的想法,需要写很多代码才能实现;

java.util.Date的数据内容为xxxx-xx-xx xx:xx:xx,有时候不需要时间,只需要日期。

从数据库中取值出来的日期类型放到这个类中的时候,会在时间位自动补上当前时间。这使得本来两个日期在数据库中是相等的,取出来放到这个类得时候就不再相等了,需要去考虑时间上的误差。

 

java.util.Date时间系统的运算系列

after,before

compareTo原小于参数返回<0,等于返回=0,大于返回>0

 

优点:于数据库同类型,可以方便传输(无论是从DB到src还是反方向),方便比较大小

缺点:缺少运算单元,不适合时间跳跃的运算和间隔的运算

 

总结:calendar具有强大的跳跃运算和间隔运算能力,在需要的时候,可以将sql系列的时间转成calendar。

先设置calendar为历元,然后从sql系列时间中转换,最后再转回sql系列时间。

calendar只用于时间有跳跃的转换,对比运算统一使用sql系统,这样代码将更清晰

 

 

 

 

 

 

 

  • 大小: 6.6 KB
  • 大小: 5.8 KB
  • 大小: 3.4 KB
分享到:
评论

相关推荐

    sqlserver数据库类型对应Java中的数据类型

    在 SQL Server 中,datetime2 是一个日期时间类型,用于存储日期时间值。在 Java 中,datetime2 对应的数据类型是 java.sql.Timestamp。 datetimeoffset 在 SQL Server 中,datetimeoffset 是一个日期时间偏移类型...

    Oracle数据库时间类型与JAVA之间的转换和应用.pdf

    ### Oracle数据库时间类型与JAVA之间的转换和应用 #### 一、从Oracle数据库中查询时间的格式 在Oracle数据库中,时间通常以特定的格式存储。当通过Java应用程序使用JDBC从Oracle数据库中检索时间时,可能会遇到...

    JAVA数据库-数据库集合

    ### JAVA数据库-数据库集合 #### Java数据库编程简介 在Java中,通过JDBC(Java Database Connectivity)接口可以实现与各种关系型数据库的连接与交互。JDBC提供了一套标准的API,允许开发者在Java应用中执行SQL...

    java读取PI数据库测点值.docx

    在 Java 中,需要指定类型(Type.INT),Api 里的 int、float 等基本类型和 String 类型。Api 里的 date,是用 int[] 表示的。 在传值与返回值时,JNative 对象调用 invoke 后会有返回,对照 API,一般返回值是调用...

    JAVA数据类型与Hibernate的类型映射

    其次,对于复杂的数据类型,如日期和时间,Java的Date和Calendar类在Hibernate中可以映射为java.sql.Date、java.sql.Time或java.sql.Timestamp。对于数组和集合,如List、Set、Map等,Hibernate提供了ListType、...

    火车票管理系统(java 数据库),java火车票售票系统,Java

    【标题】"火车票管理系统(java 数据库)"是一个基于Java技术和数据库技术开发的系统,主要用于实现对火车站票务的管理。这个系统可能包含了售票、查询、退票等多种功能,旨在提高铁路票务工作的效率和准确性。 ...

    使用JAVA内存数据库h2database性能优化

    启动h2database嵌入模式通常涉及将h2database的jar文件添加到项目的类路径中,然后通过Java代码调用特定的API来创建和管理数据库。例如,可以使用`org.h2.tools.Server`类启动内存数据库服务。 性能优化策略包括: ...

    Java数据类型和MySql数据类型对应表

    Java 数据类型和 MySql 数据类型对应表 ...了解 Java 数据类型和 MySql 数据类型的对应关系是非常重要的,这可以帮助我们正确地将 Java 对象映射到 MySql 数据库表中,并确保数据的一致性和正确性。

    JAVA实验报告四数据库编程.docx

    实验报告的主题是“JAVA实验报告四数据库编程”,主要目的是让学生掌握基本的数据库管理系统(DBMS)使用、理解Java数据库连接(JDBC)的概念,并通过JDBC-ODBC桥接技术来开发实际的数据库系统。实验内容包括设计和...

    mysql时间类型对应的java类型1

    本文将深入探讨MySQL数据库中的时间类型以及它们在Java编程语言中相对应的数据类型,以及如何在两者之间进行转换。 MySQL数据库提供了多种时间类型来处理日期和时间数据: 1. **DATE**:这个类型仅存储日期,格式...

    Java 数据库连接泄漏 解决方法

    本文将详细介绍如何在WebLogic环境下解决Java数据库连接泄漏问题,包括临时解决方案和长期监控机制。 #### 二、什么是数据库连接泄漏? 数据库连接泄漏是指应用程序在使用完数据库连接后没有正确地关闭这些连接,...

    javacmd数据库备份

    在Java环境中,这可能需要跟踪和比较数据库的事务日志,然后只备份那些有变化的部分。 3. **差异备份**:与增量备份类似,但备份的是自上次完整备份以来发生变化的数据。这种方式可以更快地恢复,因为只需要应用...

    java与oracle等数据库类型对应

    本文主要探讨的是Java与Oracle数据库之间数据类型的映射关系,特别是针对"Number"和"Date"类型。 首先,让我们关注Oracle中的"Number"类型。Oracle的"Number"是一种可以存储整数和浮点数的通用数值类型。它分为两种...

    java编写的数据库自动备份源码

    在使用这个Java编写的数据库备份程序时,用户需要根据自己的数据库类型(如MySQL, Oracle, PostgreSQL等)调整JDBC配置,并可能需要定制备份和恢复策略以适应特定的需求。同时,安全问题也不容忽视,备份文件应加密...

    java根据数据库表或视图创建实体

    这个"java根据数据库表或视图创建实体"的小工具,无疑是Java开发者的好帮手,尤其是在处理大量数据库表结构时,能够极大地提高开发速度和代码质量。同时,它也体现了Java编程中自动化和代码生成的思想,使得开发变得...

    javasqlTypes数据库字段类型java数据类型的对应关系

    在Java编程语言中,与数据库交互是常见的任务,这就涉及到`java.sql.Types`枚举类,它是Java数据类型与数据库字段类型之间的桥梁。`java.sql.Types`定义了一系列常量,这些常量代表了SQL标准中的数据类型,使得我们...

    Java数据库操作组件1.1

    总之,Java数据库操作组件1.1是一个针对Java开发者的重要升级,它增强了数据库操作的灵活性和效率,简化了复杂数据类型的处理,提升了性能,并优化了错误处理,使得数据库编程变得更加得心应手。对于那些需要频繁与...

    java测试数据库连接关闭

    在Java编程中,数据库连接管理是一项关键任务,尤其是在处理大量数据或者长时间运行的应用程序中。Oracle数据库是企业级广泛使用的数据库管理系统,与之交互通常涉及JDBC(Java Database Connectivity)API。本文将...

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将"TITLE \n" +"COMPANY "可以转换为 /** * TITLE */ @Column(name = ...

Global site tag (gtag.js) - Google Analytics