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; }