今天在读取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);
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-25 08:35:42