private void getNetTime() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); // 时区设置
try {
URL url = new URL("http://www.baidu.com");//取得资源对象
URLConnection uc = url.openConnection();//生成连接对象
uc.connect(); //发出连接
long ld = uc.getDate(); //取得网站日期时间(时间戳) System.currentTimeMillis()
Date date=new Date(ld);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
String currTime = formatter.format(date);
System.out.print("currTime=" + currTime);
} catch (IOException e) {
e.printStackTrace();
}
}
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestTime {
public static void main(String[] args) {
// TODO Auto-generated method stub
String firstTime = "2015-01-07 08:52";
String secondTime = "2015-01-07 11:53";
CompareDateTime(firstTime, secondTime);
String thirdTime = "2015-01-07 08:52";
String fourthTime = "2015-01-07 12:53";
CompareDateTime(thirdTime, fourthTime);
String fifthTime = "2015-01-07 08:52";
String sixthTime = "2015-01-07 13:53";
CompareDateTime(fifthTime, sixthTime);
String date1 = "2014-12-03";
String date2 = "2015-01-07";
System.out.println("天数=="+daysBetween(date1, date2));
System.out.println("后一天=="+getSpecifiedDayAfter(date1));
}
public static boolean CompareDateTime(String time1, String time2) {
boolean isFirstBig = false;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date date1 = dateFormat.parse(time1);
Date date2 = dateFormat.parse(time2);
System.out.println("date1==" +date1.getTime());
System.out.println("date2==" +date2.getTime());
// Method 1
if (date1.getTime() > date2.getTime()) {
System.out.println("M1--date1在date2后");
isFirstBig = true;
} else if (date1.getTime() < date2.getTime()) {
System.out.println("M1--date1在date2前");
isFirstBig = false;
}
// Method 2
if (date1.compareTo(date2) == 1) {
System.out.println("M2--date1在date2后");
isFirstBig = true;
} else if (date1.getTime() < date2.getTime()) {
System.out.println("M2--date1在date2前");
isFirstBig = false;
}
// Method 3
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
if (cal1.after(cal2)) {
System.out.println("M3--date1在date2后");
} else {
System.out.println("M3--date1在date2前");
}
} catch (Exception exception) {
exception.printStackTrace();
}
return isFirstBig;
}
/**
* 计算两天之间的天数
* @param startStr
* @param endStr
* @return
*/
public static int daysBetween(String startStr, String endStr) {
int daysBetween = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(startStr);
Calendar startDate = Calendar.getInstance();
startDate.setTime(date1);
Date date2 = sdf.parse(endStr);
Calendar endDate = Calendar.getInstance();
endDate.setTime(date2);
Calendar date = (Calendar) startDate.clone();
while (date.before(endDate)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return daysBetween;
}
/**
* 获得指定日期的后一天
*
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat("yyyy-MM-dd")
.format(c.getTime());
return dayAfter;
}
}
运行后控制台输出如下:
date1==1420591920000
date2==1420602780000
M1--date1在date2前
M2--date1在date2前
M3--date1在date2前
date1==1420591920000
date2==1420606380000
M1--date1在date2前
M2--date1在date2前
M3--date1在date2前
date1==1420591920000
date2==1420609980000
M1--date1在date2前
M2--date1在date2前
M3--date1在date2前
天数==35
后一天==2014-12-04
代码虽然简单,但粗心大意的我却在这上面耗费了近半天的时间
问题描述:如上,有三组时间对,其中第二组的第二个时间为12点多,在没改之前,只有这组的返回结果是错误的,调试半天找不到原因,后来有网友建议把gettime的值打印出来看看,打出来后发现12点多返回的long值确实比其他几个都小很多,然后把年月日去掉直接比较时间还是同样的结果,然后就突然意识到可能是“时”这个单位的问题,然后就看到了这行代码
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
下意识的将这行代码改为
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
再次运行后看结果就正确了,看来区别只在于hh的大小写
然后在博客园看到这样一篇文章 《日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别》
{0:yyyy-MM-dd HH:mm:ss.fff}:使用24小时制格式化日期
{0:yyyy-MM-dd hh:mm:ss.fff}:使用12小时制格式化日期
原来就是24小时制和12小时制格式的区别,所以大家以后要注意了,同理还有下面这对:
Calendar.HOUR_OF_DAY:使用24小时制
Calendar.HOUR:使用12小时制
获取两个时间之间相差多少小时,忽略分和秒,参考网上的,出处找不到了,在此记录下
/**
* 两个时间相差距离多少小时
*
* @param str1
* 时间参数 1 格式:1990-01-01 12:00:00
* @param str2
* 时间参数 2 格式:2009-01-01 12:00:00
* @return long[] 返回值为:{天, 时, 分, 秒}
*/
public static long getDistanceTimes(String str1, String str2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date one;
Date two;
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
try {
one = df.parse(str1);
two = df.parse(str2);
long time1 = one.getTime();
long time2 = two.getTime();
long diff;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
day = diff / (24 * 60 * 60 * 1000);
hour = (diff / (60 * 60 * 1000) - day * 24);
min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
} catch (ParseException e) {
e.printStackTrace();
}
return day*24 + hour;
}
年月日的比较以及日期间隔的获取
/**
* 起始年月日yyyy-MM-dd与终止年月日yyyy-MM-dd之间的比较。
*
* @param DATE1
* 格式为yyyy-MM-dd
* @param DATE2
* 格式为yyyy-MM-dd
* @return isFirstBig。
*/
@SuppressLint("SimpleDateFormat")
public static boolean CompareDate(String DATE1, String DATE2) {
boolean isFirstBig = false;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.compareTo(dt2) == 1) {
System.out.println("dt1 在dt2前");
isFirstBig = true;
} else if (dt1.getTime() < dt2.getTime()) {
System.out.println("dt1在dt2后");
isFirstBig = false;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return isFirstBig;
}
/**
* 起始年月yyyy-MM与终止月yyyy-MM之间的比较。
*
* @param DATE1
* 格式为yyyy-MM
* @param DATE2
* 格式为yyyy-MM
* @return isFirstBig。
*/
@SuppressLint("SimpleDateFormat")
public static boolean CompareDateMonth(String DATE1, String DATE2) {
boolean isFirstBig = false;
DateFormat df = new SimpleDateFormat("yyyy-MM");
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.compareTo(dt2) == 1) {
System.out.println("dt1 在dt2前");
isFirstBig = true;
} else if (dt1.getTime() < dt2.getTime()) {
System.out.println("dt1在dt2后");
isFirstBig = false;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return isFirstBig;
}
/**
* 起始年月yyyy-MM与终止月yyyy-MM之间跨度的月数。
*
* @param beginMonth
* 格式为yyyy-MM
* @param endMonth
* 格式为yyyy-MM
* @return 整数。
*/
public static int getIntervalMonth(String beginMonth, String endMonth) {
int intBeginYear = Integer.parseInt(beginMonth.substring(0, 4));
int intBeginMonth = Integer.parseInt(beginMonth.substring(beginMonth
.indexOf("-") + 1));
int intEndYear = Integer.parseInt(endMonth.substring(0, 4));
int intEndMonth = Integer.parseInt(endMonth.substring(endMonth
.indexOf("-") + 1));
return ((intEndYear - intBeginYear) * 12)
+ (intEndMonth - intBeginMonth) + 1;
}
/**
* 求两个日期相差天数
*
* @param sd
* 起始日期,格式yyyy-MM-dd
* @param ed
* 终止日期,格式yyyy-MM-dd
* @return 两个日期相差天数
*/
public static long getIntervalDays(String sd, String ed) {
return ((java.sql.Date.valueOf(ed)).getTime() - (java.sql.Date
.valueOf(sd)).getTime())
/ (3600 * 24 * 1000);
}
/**
* 得到指定月的天数
* */
public static int getMonthLastDay(int year, int month)
{
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);//把日期设置为当月第一天
a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
public class TimeSort implements Comparator {
public int compare(Object arg0, Object arg1) {
NoteBean user0 = (NoteBean) arg0;
NoteBean user1 = (NoteBean) arg1;
int flag = user1.getTime().compareTo(user0.getTime());
return flag;
}
}
调用方法
TimeSort sort = new TimeSort();
Collections.sort(beanList, sort);