在做项目的时候遇到了关于时间类型和字符串类型互相转换的问题。总结了一些心得,分享给大家。
首先介绍一下常用的时间类型有哪些,大致分为以下六种类型(其中java.text.SimpleDateFormat和java.util.Calendar可以理解为工具类)。
- java.util.Date (年、月、日、时、分、秒)
- java.sql.Date (年、月、日)
- java.sql.Time (时、分、秒)
- java.sql.Timestamp (年、月、日、时、分、秒、纳秒)
- java.text.SimpleDateFormat
- java.util.Calendar
java.util.Date
第一个出场的是老大哥java.util.Date。
为什么说他是老大哥,因为java.sql.Date、java.sql.Time、java.sql.Timestamp这三个类都是继承他的。
通过new一个不带参数的对象即可获取系统当前时间。即:
java.util.Date utilDate = new java.util.Date();
通过该对象的getTime()方法可以把时间转换成毫秒数。即:
long utilTime=utilDate.getTime();
java.sql.Date、java.sql.Time、java.sql.Timestamp
接着出场的是java.sql.Date、java.sql.Time、java.sql.Timestamp三兄弟。
他们三个对象被创建出来的时候必须传入一个long类型的变量(毫秒数),即:
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
java.sql.Time sqlTime = new java.sql.Time(utilDate.getTime());
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(utilDate.getTime());
通过对象的getTime()方法可以把时间转换成毫秒数。即:
long sqlDateTime=sqlDate.getTime();
long sqlTimeTime=sqlTime.getTime();
long sqlTimestampTime=sqlTimestamp.getTime();
java.text.SimpleDateFormat
这个类经常在设置日期格式中起到关键性作用,可以把字符串转换成自己想要的格式的日期类型,也可以把日期类型转换成特定格式的字符串。
**parse(String)**用于字符串转日期
**format(Date)**用于日期转字符串
例如:
//创建一个名为sdf的SimpleDateFormat对象,并构建其为"yyyy-MM-dd"(年月日)格式,当然也可以按需变更格式,例如"yyyy-MM-dd-hh-mm-ss"就是年-月-日-时-分-秒格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//用format(Date)方法将Date类型转换成字符串类型
String s = sdf.format(new java.util.Date());
//用parse(String)方法将字符串类型转换成Date类型
Date date = sdf.parse(s)
java.util.Calendar
常见用法:
//创建对象
java.util.Calendar cal = java.util.Calendar.getInstance();
//Calendar转化为Date
java.util.Date date = cal.getTime();
//Date转化为Calendar
cal.setTime(date);
//get获取
int year = cal.get(Calendar.YEAR);//获取年份
int month=cal.get(Calendar.MONTH);//获取月份
int day=cal.get(Calendar.DATE);//获取日
int hour=cal.get(Calendar.HOUR);//获取小时
int minute=cal.get(Calendar.MINUTE);//获取分
int second=cal.get(Calendar.SECOND);//获取秒
int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//获取当前周的第几天
//set设置
cal.set(Calendar.YEAR,2019);//设置年份
cal.set(Calendar.MONTH,1);//设置月份
cal.set(Calendar.DATE,1);//设置日
cal.set(Calendar.HOUR,0);//设置小时
cal.set(Calendar.MINUTE,0);//设置分钟
cal.set(Calendar.SECOND,0);//设置秒
//还有很多Calendar的属性,读者可以一一去探索。
值得注意的是,java.util.Calendar的getTime()方法返回的是一个java.util.Date类型的变量。
这个类可以用于处理一些特殊的场景,例如,获取指定月份的第一天和最后一天。
//创建一个名为cal的java.util.Calendar对象
java.util.Calendar cal = java.util.Calendar.getInstance();
//设置Calendar对象的时间
cal.setTime(new SimpleDateFormat("yyyy-MM").parse("年份-月份"));
//示例:cal.setTime(new SimpleDateFormat("yyyy-MM").parse("2008-2"));
//获取上面所输入的月份的最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//获取上面所输入的月份的最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);