表单提交过来,都是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系统,这样代码将更清晰

java和数据库时间类型相关推荐

  1. mysql 数据库时间类型 datetime 数据在页面上显示一串数字, 用函数date_format( )转换格式 ;

    mysql 数据库时间类型 datetime 转换格式 数据库时间字段datetime可以使用date_format( )函数进行时间的转换. 数据库时间字段类型: 数据库查询结果: 没转换前页面显示 ...

  2. java时间定义什么类型_1 Java中的时间类型

    总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1Java中的时间类型 java.sql包下给出三个与数据库 ...

  3. hibernate、java、数据库对应类型

    引自 https://my.oschina.net/heau/blog/498874 java.数据库对应类型 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述     ...

  4. 数据库中clob类型对应java,java 操作数据库clob类型大字段

    java 操作数据库clob类型大字段 java 操作数据库clob类型大字段,处理工具类如下: package org.shefron.utils; import java.io.StringRea ...

  5. java8 朗姆表达式,java同步数据库时间问题[问题点数:20分,结帖人vtison]

    查看您说的数据类型,例如MySQL数据库,日期仅具有日期,时间仅具有时间,datetime是常用的记录时间类型,它可以精确到毫秒,就好像它是时间戳一样,时间戳也是可选的,第一个表中的timestamp ...

  6. 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)

    Java获得当前时间 1 java.util.Date date = new java.util.Date(); 2 Timestamp time = new Timestamp(date.getTi ...

  7. java读mysql时间类型_MySql与Java的时间类型

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

  8. MySQL数据库时间类型datetime、bigint、timestamp的查询效率比较

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://juejin.im/post/6844903701094596615 数据库中可以用datetime.bi ...

  9. oracle赋值当前时间,Oracle数据库时间类型

    这次遇到的问题小Alan其实一年半前做证券行业项目就已经遇到过,但是一直没有去思考是什么原因导致的这样的悬疑案,悬疑案是什么呢?其实很简单,我想有不少童鞋都有用到Oracle数据库,情形是这样子的,这 ...

  10. java与mysql时间类型对应的问题

    项目中遇到一个问题,从后台给出的json字符串中取得的时间,之后通过方法转换成  yyyy-MM-dd hh:mm:ss 的时候,转换后的得到的竟然是1969年...之后排查问题: 发现了在mayba ...

最新文章

  1. 使用 Smartmontools 检测硬盘坏道
  2. 如何惹毛一名开发者?
  3. LINUX - pthread_detach()与pthread_join()
  4. 【特征工程】(未完成)特征选择
  5. LiveVideoStack线上分享第三季(三):大规模视频处理的挑战与应对
  6. 【视频】CCNA——telnet和SSH的配置
  7. linux上点时间延时,Linux上时间和定时器
  8. 推荐5个应用 jQuery 特效的精美网站
  9. 如何注释ascx中的代码
  10. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结
  11. 希尔伯特变换到底有什么用
  12. JAVA大型OA协同办公系统源码【源码免费分享】
  13. js 校验身份证号码
  14. 无线路由器连接无线路由器
  15. 原生js编写学生信息管理系统——添加学生信息
  16. 计算机与宽带路由器的连接过程,路由器怎么插线和宽带图解 路由器设置步骤图解...
  17. AQS是什么?都是怎么用的?
  18. Python多子图绘制
  19. collection中cell选中状态下分享图片的快照snapshot
  20. CodeLite IDE for windows (一)安装及HelloWorld

热门文章

  1. Strtok的使用方法
  2. 只有单号,用这个方法自动识别快递公司,快速查询出物流
  3. 在React项目中引入字体文件并使用
  4. charles连接不上手机
  5. ubuntu 64位下载 处理器为Intel
  6. Googler为什么很幸福?
  7. 物联网-电力监控平台(汇总)
  8. 数字电视 星座图 matlab,数字电视 MER 及星座图剖析
  9. PowerPoint 在播放时自动运行宏
  10. 11. 深度学习实践:实践方法论