目前的java版本中,Date类主要通过SimpleDateFormat和Calendar类进行处理,Date类内部的很多方法都被弃用。SimpleDateFormat可以按照一定的格式对Date和String进行转换,而Calendar类则是根据国际化标准来构造Date实例。
举例两个常见用法:
计算两个日期的天数,输入为两个时间的字符串,如“20151117”
/**
* 计算两个日期间的天数
*/
public static long getDayNum(String start, String end) {
// 格式标准:yyyyMMdd
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//通过Calendar.getInstance()方法来构造Calendar实例
Calendar calendar = Calendar.getInstance(Locale.CHINA);
try {
Date date1 = sdf.parse(start);
calendar.setTime(date1);
int day1 = calendar.get(Calendar.DAY_OF_YEAR);
Date date2 = sdf.parse(end);
calendar.setTime(date2);
int day2 = calendar.get(Calendar.DAY_OF_YEAR);
if(day2 < day1)
retrun day1 - day2 + 1;
else
return day2 - day1 + 1;
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
计算两个时间段间的分秒数,这回的输入为两个时间的时间戳。
/**
* 计算两个时间的分秒数
*/
public static String getTimeLength(String start, String end) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
try {
//传入时间戳,得到对应的时间
calendar.setTimeInMillis(Long.parseLong(start));
int min1 = calendar.get(Calendar.MINUTE);
int sec1 = calendar.get(Calendar.SECOND);
calendar.setTimeInMillis(Long.parseLong(end));
int min2 = calendar.get(Calendar.MINUTE);
int sec2 = calendar.get(Calendar.SECOND);
int secRes, minRes;
if (sec2 - sec1 < 0) {
sec2 += 60;
min2--;
}
secRes = sec2 - sec1;
if ((minRes = min2 - min1) < 0) {
return "00:00";
}
return String.format("%02d", minRes) + ":" + String.format("%02d", secRes);
} catch (Exception e) {
Log.e("lzq", "getTimeLength found error!", e);
}
return "00:00";
}
上述代码用到了String.format()方法。String.format()能够把int、double转化成我们想要的字符串。
举两个例子:
显示两位数字,不足补0,一般用于分秒的显示
int a = 5;
//d:整数
//2:两位
//0:不足补0
String.format("%02d", a);
结果为05
保留一位小数:
float b = 8.932f;
//.1f:一位小数
String.format("%.1f",b);
结果为8.9