今天遇到一个项目上的小问题,没有什么难度,但是请有意思的,就是通过日期,返回具体的事件描述,比如日期是今天,就仅仅返回时分秒;如果是昨天就返回昨天加上时分秒;如果是前天并且在本周内就返回星期几;如果是今年就返回月日时分秒,如果是往年就返回年月日时分秒。代码如下十分简单:
package Test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static int dayForWeekNum(String pTime) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(format.parse(pTime));
int weekNum = 0;
if(c.get(Calendar.DAY_OF_WEEK) == 1){
weekNum = 7;
}else{
weekNum = c.get(Calendar.DAY_OF_WEEK) - 1;
}
return weekNum;
}
public static String dayForWeekStr(int weekNum){
String week = "";
switch (weekNum) {
case 1:
week = "星期一";
break;
case 2:
week = "星期二";
break;
case 3:
week = "星期三";
break;
case 4:
week = "星期四";
break;
case 5:
week = "星期五";
break;
case 6:
week = "星期六";
break;
case 7:
week = "星期日";
break;
default:
break;
}
return week;
}
public static String getDateStr(String dynamicTime) throws Exception {
SimpleDateFormat smdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt = new Date();
String nowTime = smdf.format(dt);
String beforeTime = dynamicTime;
String result = "";
int today = Integer.valueOf(nowTime.substring(8, 10));
int beforeDay = Integer.valueOf(beforeTime.substring(8, 10));
if(today == beforeDay){
//今天
result = beforeTime.substring(11);
}
else if((today - 1) == beforeDay){
//昨天
result = "昨天 "+beforeTime.substring(11);
}
else if((today - 1) > beforeDay && dayForWeekNum(nowTime) > dayForWeekNum(beforeTime) && dayForWeekNum(beforeTime) > 0){
//本周内
result = dayForWeekStr(dayForWeekNum(beforeTime));
}
else{
//本周之前,可能是今年,可能是往年
int thisYear = Integer.valueOf(nowTime.substring(0, 4));
int beforeYear = Integer.valueOf(beforeTime.substring(0, 4));
if(thisYear == beforeYear){
//今年
result = beforeTime.substring(5);
}
else if(thisYear > beforeDay){
//往年
result = beforeTime;
}
}
return result;
}
public static void main(String[] args){
try {
System.out.println(getDateStr("2013-06-01 00:03:14"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}