java与mysql的时间和⽇期mysql的时间⽇期存储格式如下:
year xxxx(年)
time xx:xx:xx(时分秒) 只表⽰时间
date xxxx-xx-xx(年⽉⽇) 只表⽰⽇期
datetime xxxx-xx-xx xx:xx:xx(年⽉⽇时分秒) 表⽰⽇期和时间
timestamp xxxx-xx-xx xx:xx:xx(年⽉⽇时分秒) 精确表⽰⽇期和时间
java中的时间⽇期表⽰:
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp
后⾯这三个类继承⾃java.util.Date, 扩展了其功能
java使⽤这三个类型与mysql交互更为⽅便
java.sql.Date 只读取⽇期
java.sql.Time 只读取时间
java.sql.Timestamp 读取⽇期和时间
Timestamp
测试, 数据库存放的datetime字段的某个值是 : "2001-12-15 12:30:59"
实体类中使⽤String接收到的是: "2001-12-15 12:30:59.0" (即默认会带上 ' .0 ')
使⽤TimeStamp接收到的是其长整型(即表⽰时间的是⼀串数字)
1.如果使⽤TimeStamp接收, 可以使⽤SimpleDateSormat格式化为String
// 获取TimeStamp的长整型表现形式
long datetime = Size().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
String str = sdf.format(datetime);
但是有⼀个问题, 既然实体中使⽤的是TimeStamp类型(这个类型转换为String表⽰时, 默认在后⾯加上: '.0')
⽽实体对象中TimeStamp的值, 是这样: "2001-12-15 12:30:59.0",
并没有改变实体对象中TimeStamp的值
如果要返回这个实体对象, 则不能准备表⽰数据库中此数据(即:"2001-12-15 12:30:59")
我可以使⽤格式化后的String数据, 重新封装为新类型的对象, 再返回新对象(⿇烦在于重新创建类型)
2.如果⽤的String接收, 可以对String截取, 这样简便很多
@RequestMapping("/getSongBySongId")java时间日期格式转换
@ResponseBody
public Object test() {
List<Song> s = dao.findAll();
for (Song song : s) {
String size = Size();
// 从0开始截取到这个点的位置
String newSize = size.substring(0, size.lastIndexOf("."));
// 重新设置实体对象的size属性
song.setSize(newSize);
}
return s;
}
总结:
数据库使⽤date, java实体类推荐使⽤java.sql.Date接收
数据库使⽤time, java实体类推荐使⽤java.sql.Time接收
数据库使⽤datetime, java实体类推荐使⽤String接收
由于实体类与mysql如上⾯对应, 在向mysql插⼊记录的时候:
public void insertTest() throws ParseException {
Song s = new Song();
s.setSong_name("呵呵");
String d = "00:03:05"; // 构建⽇期/时间格式的String
SimpleDateFormat f = new SimpleDateFormat("hh:mm:ss");
long lo = f.parse(d).getTime();
Time time = new Time(lo);
s.setSize(time);
dao.save(s);
}
date类型也是⼀样的操作, ⽽datetime则最简单(直接⽤String)
本⼈⾃⼰摸索时, 还没到更好的办法处理⽇期时间办法, 但⽬前 ⽇期/时间 的读写按这样做是可⾏的
如果忽略实体中的⽇期/时间类型, 全部按String来存储
经过测试, 这样对mysql的读写操作完全没有问题, ⽽且还更加简单, 也许应该这样做
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论