表单提交过来,都是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
分享到:
相关推荐
在 SQL Server 中,datetime2 是一个日期时间类型,用于存储日期时间值。在 Java 中,datetime2 对应的数据类型是 java.sql.Timestamp。 datetimeoffset 在 SQL Server 中,datetimeoffset 是一个日期时间偏移类型...
### Oracle数据库时间类型与JAVA之间的转换和应用 #### 一、从Oracle数据库中查询时间的格式 在Oracle数据库中,时间通常以特定的格式存储。当通过Java应用程序使用JDBC从Oracle数据库中检索时间时,可能会遇到...
### JAVA数据库-数据库集合 #### Java数据库编程简介 在Java中,通过JDBC(Java Database Connectivity)接口可以实现与各种关系型数据库的连接与交互。JDBC提供了一套标准的API,允许开发者在Java应用中执行SQL...
在 Java 中,需要指定类型(Type.INT),Api 里的 int、float 等基本类型和 String 类型。Api 里的 date,是用 int[] 表示的。 在传值与返回值时,JNative 对象调用 invoke 后会有返回,对照 API,一般返回值是调用...
其次,对于复杂的数据类型,如日期和时间,Java的Date和Calendar类在Hibernate中可以映射为java.sql.Date、java.sql.Time或java.sql.Timestamp。对于数组和集合,如List、Set、Map等,Hibernate提供了ListType、...
【标题】"火车票管理系统(java 数据库)"是一个基于Java技术和数据库技术开发的系统,主要用于实现对火车站票务的管理。这个系统可能包含了售票、查询、退票等多种功能,旨在提高铁路票务工作的效率和准确性。 ...
启动h2database嵌入模式通常涉及将h2database的jar文件添加到项目的类路径中,然后通过Java代码调用特定的API来创建和管理数据库。例如,可以使用`org.h2.tools.Server`类启动内存数据库服务。 性能优化策略包括: ...
Java 数据类型和 MySql 数据类型对应表 ...了解 Java 数据类型和 MySql 数据类型的对应关系是非常重要的,这可以帮助我们正确地将 Java 对象映射到 MySql 数据库表中,并确保数据的一致性和正确性。
实验报告的主题是“JAVA实验报告四数据库编程”,主要目的是让学生掌握基本的数据库管理系统(DBMS)使用、理解Java数据库连接(JDBC)的概念,并通过JDBC-ODBC桥接技术来开发实际的数据库系统。实验内容包括设计和...
本文将深入探讨MySQL数据库中的时间类型以及它们在Java编程语言中相对应的数据类型,以及如何在两者之间进行转换。 MySQL数据库提供了多种时间类型来处理日期和时间数据: 1. **DATE**:这个类型仅存储日期,格式...
本文将详细介绍如何在WebLogic环境下解决Java数据库连接泄漏问题,包括临时解决方案和长期监控机制。 #### 二、什么是数据库连接泄漏? 数据库连接泄漏是指应用程序在使用完数据库连接后没有正确地关闭这些连接,...
在Java环境中,这可能需要跟踪和比较数据库的事务日志,然后只备份那些有变化的部分。 3. **差异备份**:与增量备份类似,但备份的是自上次完整备份以来发生变化的数据。这种方式可以更快地恢复,因为只需要应用...
本文主要探讨的是Java与Oracle数据库之间数据类型的映射关系,特别是针对"Number"和"Date"类型。 首先,让我们关注Oracle中的"Number"类型。Oracle的"Number"是一种可以存储整数和浮点数的通用数值类型。它分为两种...
在使用这个Java编写的数据库备份程序时,用户需要根据自己的数据库类型(如MySQL, Oracle, PostgreSQL等)调整JDBC配置,并可能需要定制备份和恢复策略以适应特定的需求。同时,安全问题也不容忽视,备份文件应加密...
这个"java根据数据库表或视图创建实体"的小工具,无疑是Java开发者的好帮手,尤其是在处理大量数据库表结构时,能够极大地提高开发速度和代码质量。同时,它也体现了Java编程中自动化和代码生成的思想,使得开发变得...
在Java编程语言中,与数据库交互是常见的任务,这就涉及到`java.sql.Types`枚举类,它是Java数据类型与数据库字段类型之间的桥梁。`java.sql.Types`定义了一系列常量,这些常量代表了SQL标准中的数据类型,使得我们...
总之,Java数据库操作组件1.1是一个针对Java开发者的重要升级,它增强了数据库操作的灵活性和效率,简化了复杂数据类型的处理,提升了性能,并优化了错误处理,使得数据库编程变得更加得心应手。对于那些需要频繁与...
在Java编程中,数据库连接管理是一项关键任务,尤其是在处理大量数据或者长时间运行的应用程序中。Oracle数据库是企业级广泛使用的数据库管理系统,与之交互通常涉及JDBC(Java Database Connectivity)API。本文将...
4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将"TITLE \n" +"COMPANY "可以转换为 /** * TITLE */ @Column(name = ...