java时间类转换_java 时间相关的类互相转换

今天在读取solr中的时间时,发现又是一堆时间格式转来转去,现在总结下之前工程中都遇到的关于时间的转换,这里主要是以java的类做总结:

一. Timestamp 与 Date( java.util.Date )互转

Date是Timestamp的父类!

1.1 Timestamp ->Date :

// date对象指向的实体是一个timestamp,这是父类引用指向子类对象。

public Date TimestampToDate(Timestamp timestamp) {

Date date = new Date();

try {

date = timestamp;

return date;

}catch(Exception e) {

e.printStackTrace();

}

}

1.2 Date -> Timestamp :

//父类不能直接向子类转化,其实很简单;

Timestamp timestamp = new Timestamp(date.getTime());

二. Timestamp 与 String互转

2.1 Timestamp -> String:

一种是以直接timestamp.toString();

或者利用DateFormat;

public String timestampToString(Timestamp timestamp) {

String tsStr = “”;

DateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);

try {

//方法一

tsStr = timestamp.toString();

//方法二

tsStr = sdf.format(timestamp);

return tsStr;

} catch (Exception e) {

e.printStackTrace();

return tsStr;

}

}

2.2 String-> Timestamp:

Timestamp timestamp=Timestamp.valueOf(tsStr);

注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f…] 格式。

三. Date( java.util.Date )与 String 互转

3.1 Date -> String:

public String dateToString(Date date, String format) {

//format: “yyyy/MM/dd HH:mm:ss”

String dateStr="";

DateFormat sdf = new SimpleDateFormat(format);

try {

dateStr = sdf.format(date);

return dateStr;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

3.2 String->Date:

public Date stringToDate(String dateStr,String format) {

Date date = new Date();

//注意format的格式要与日期String的格式相匹配

//format1: Locale.US

//format: “yyyy/MM/dd HH:mm:ss”

//DateFormat sdf1 = new SimpleDateFormat(format1,Locale.US);

DateFormat sdf = new SimpleDateFormat(format);

try {

date = sdf.parse(dateStr);

return date;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

四. Calendar相关功能模块

4.1 DateUtil有关calendar的一部分:

/** * 获取某一个月的第一天 *@param month *@param Timestamp *@return */

public static Timestamp getFirstDayOfMonth(Calendar calendar) {

calendar.set(Calendar.DATE, 1); // 设置当前月第一天

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

return new Timestamp(calendar.getTimeInMillis());

}

/** * 获取某一的开始时间 *@param month *@param Timestamp *@return */

public static Timestamp getFirstTimeOfDay(Calendar calendar) {

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

return new Timestamp(calendar.getTimeInMillis());

}

/** * 获取某一天的最后时间 *@param month *@param Timestamp *@return */

public static Timestamp getLastTimeOfDay(Calendar calendar) {

calendar.set(Calendar.HOUR_OF_DAY, 23);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

return new Timestamp(calendar.getTimeInMillis());

}

/** * 获取某一个月的最后一天 *@param month *@param Timestamp *@return */

public static Timestamp getLastDayOfMonth(Calendar calendar) {

calendar.set(Calendar.DATE, 1); // 设置当前月的1号

calendar.set(Calendar.HOUR_OF_DAY, 23);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

calendar.add(Calendar.MONTH, 1); // 加一个月,变为下月的1号

calendar.add(Calendar.DATE, -1); // 减一天,变为当前月的最后一天

return new Timestamp(calendar.getTimeInMillis());

}

/** * 计算两个日期之间相差的天数 *@param costTime *@param receivableTime *@return */

public static int getDays(Date end,Date start){

Calendar aCalendar = Calendar.getInstance();

Calendar bCalendar = Calendar.getInstance();

aCalendar.setTime(end);

bCalendar.setTime(start);

int days = 0;

while(aCalendar.before(bCalendar)){

days++;

aCalendar.add(Calendar.DAY_OF_YEAR, 1);

}

if(days==0){

aCalendar.setTime(start);

bCalendar.setTime(end);

while(aCalendar.before(bCalendar)){

days++;

aCalendar.add(Calendar.DAY_OF_YEAR, 1);

}

}

return days;

}

/** * 计算两个月份之间相差的月份数 *@param costTime *@param receivableTime *@return */

public static int getMonths(Date end,Date start){

Calendar aCalendar = Calendar.getInstance();

Calendar bCalendar = Calendar.getInstance();

aCalendar.setTime(end);

bCalendar.setTime(start);

int months = 0;

while(aCalendar.before(bCalendar)){

months++;

aCalendar.add(Calendar.MONTH, 1);

}

if(months==0){

aCalendar.setTime(start);

bCalendar.setTime(end);

while(aCalendar.before(bCalendar)){

months++;

aCalendar.add(Calendar.MONTH, 1);

}

}

return months;

}

/** * 获取某一个月的最后一天 *@param month *@param Timestamp *@return */

public static Timestamp getLastMonthTime(Calendar calendar) {

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

calendar.add(Calendar.MONTH, -1); // 减一个月,变为上个月的开始

return new Timestamp(calendar.getTimeInMillis());

}

4.2 每天固定一个时间点起程序:

除了以下的代码,当然也可以里spring配置文件实现,更简单。

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, 7); // 早上7点

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

Date date = calendar.getTime();

// 第一次执行定时任务的时间

// 如果第一次执行定时任务的时间 小于当前的时间

// 此时要在 第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。

if (date.before(new Date())) {

Calendar startDT = Calendar.getInstance();

startDT.setTime(date);

startDT.add(Calendar.DAY_OF_MONTH, 1);

date = startDT.getTime();

}

Timer timer = new Timer();

TaskMain task = new TaskMain();//TaskMain是我的任务线程

// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。

timer.schedule(task, date, PERIOD_DAY);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值