Java中对日期的操作(获取、比较、排序、间隔)
来源:互联网 发布:开源地面站 安卓源码 编辑:程序博客网 时间:2024/06/11 18:17
一,获取网络时间
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(); } }
之前使用的url是 www.bjtime.cn,获取到的时间一直是提前两天的,比如今天是2016.03.04,使用bjtime获取到的则是2016.03.02,不知道为啥,使用baidu获取的却是正常的
二、时间的比较
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 stubString 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 1if (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 2if (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 3Calendar 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 blocke.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==1420591920000date2==1420602780000M1--date1在date2前M2--date1在date2前M3--date1在date2前date1==1420591920000date2==1420606380000M1--date1在date2前M2--date1在date2前M3--date1在date2前date1==1420591920000date2==1420609980000M1--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);
1 0
- Java中对日期的操作(获取、比较、排序、间隔)
- Java 中对日期的操作
- Java 中对日期的操作
- java中对日期的加减操作
- java中对日期的加减操作
- java中对日期的操作
- java中对日期的加减操作
- java中对日期的加减操作
- java中对日期的操作
- java中对日期的加减操作
- java中对日期的加减操作
- Java 对日期的操作
- java 对日期的操作
- java对日期的操作
- Java 中对日期Date的操作 及 类型转换
- java 对日期函数的操作(Calendar的使用)
- JS中对日期时间的操作(函数)
- DB2中对日期时间的操作
- ]DWZ表单验证规则一览表
- 继承于Layout的自定义View减少布局层次
- NIO流程
- Python3.x <generator object <genexpr> at 0x0000000002731828>
- sqlserver 死锁以及处理方案
- Java中对日期的操作(获取、比较、排序、间隔)
- 管理媒体播放(2)管理媒体的聚焦
- BEGIN expected in dialog error
- 关于JEECG数据导入的改进完善
- 文本编辑器
- Lock-free VS wait-free
- 数据结构(一):顺序表
- Android Volley框架的几种post提交请求方式
- SWFUpload