表单提交过来,都是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
分享到:
相关推荐
Oracle数据库时间类型与JAVA之间的转换和应用.本人学习过程中的一点菲薄的总结,希望高手提意见
4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将"TITLE \n" +"COMPANY "可以转换为 /** * TITLE */ @Column(name = ...
本Java精华内容深入Java API、嵌套类和内部类、与时间有关的类Date,DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及...
解决时间转换,还有介绍将java.util.Date类型数据插入到数据库!
基于Java和MySQL数据库的在线测试系统可以帮助教师快速创建、管理和发布在线测试,并帮助学生进行在线答题和自动批阅。这个系统采用了Java Web技术作为开发语言,并且使用了MySQL数据库进行数据存储和管理。 教师...
其中应用环境包括:业务需求、数据需求和技术条件等具体情况,而数据库模式包括数据之间的联系、数据应满足的约束以及对数据的典型操作。从面向对象的角度讲:数据库设计就是类的持久化。 1 数据库设计的重要性 各种...
JAVA8时间插入mysql少了8小时的解决办法(csdn)————程序
数据库查询时间没有了时分秒的解决办法 增加服务器/Java应用的虚拟机参数:-Doracle.jdbc.V8Compatible="true
DB2内置数据类型可以分成数值型(numeric)、字符串型(character string)、图形字符串(graphic string)、二进制字符串型(binary string)或日期时间型(datetime)。还有一种叫做 DATALINK 的特殊数据类型。...
>ODBC->数据库客户机驱动库->数据库服务器->返回查询结果,在这种访问中值的我们注意的是虽然JAVA是"Write Once ,Run Anywhere",但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动,...
课程设计的目的和意义 ·····································(1) 2.需求分析·············································...
config/sys.properties 中指定数据库类型及连接信息,执行间隔时间: #sqlserver mysql oracle dbType=sqlserver #数据库类型 sqlserver mysql oracle ip=localhost #数据库ip port=1521 #数据库端口 inst=dongzww #...
本课程设计是用Java 语言编写,mysql数据库。 1.3数据流图 根据工资管理要求及用户需求调查分析,得到以下数据流图 图1.1第一层数据流图 图1.2职工信息的载入 图1.4考勤的信息载入 2.总体设计 2.1数据库概念设计 有...
基于java的毕业设计——校园茶舍点餐管理系统源码+数据库.zip基于java的毕业设计——校园茶舍点餐管理系统源码+数据库.zip基于java的毕业设计——校园茶舍点餐管理系统源码+数据库.zip基于java的毕业设计——校园...
java大作业,充电宝租聘系统,用到java swing 连接mysql数据库 事件处理等等 (JAVA 17) 项目基本已经完成。有一个bug就是选择充电宝类型那里获取不到类型。没时间修改,大家参考一下就好。 .sql文件可以直接用数据库...
语句的截取得到表名,将"("和")"中间的字符串以逗号分开得到列 字符串,再以空格分解得到列名,类型和约束条件。 通过对DBFUtils.createDBF()函数的调⽤实现表的创建操作,将约束条件作为记录添加到data⽬录下的...
javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation 提供 Relation Service 的定义。 javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 ...
实时数据库和关系型数据库的差异全文共5页,当前为第1页。 实时数据库和关系性数据库...SCADA 针对客户端应用的开放性,Java,SQL 实时数据库和关系型数据库的差异全文共5页,当前为第2页。 为什么在处理企业实时生产信息
Java试卷答题系统是一个用于管理和评估学生答题情况的软件系统。该系统旨在帮助教师或...数据安全与权限控制:采用数据库来存储试题和答题数据,保证数据的安全和可靠性。系统支持多级权限控制,确保只有具有权限的用
显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可...