Android获取Date时间汇总

本文介绍Java中日期时间的多种操作方法,包括获取当前时间、格式化日期、计算时间差等实用技巧,并演示如何使用Calendar类处理复杂的日期计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的时间获取方式:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateUtils {
	
	/**
	   * 获取时间戳
	   * 返回的是从1970年1月1日 00:00:00到所求时间之间的毫秒值
	   */
	  public long getTimeStamp(Date date) {
	    long times = date.getTime();
	    return times;
	  }
	 
	  /**
	   * 获取格式化的时间
	   * 输出格式:yyyy-MM-dd HH:mm:ss
	   * 其中MM代表月份,mm代表分钟,HH代表24小时制,hh代表12小时制
	   */
	  public String getFormatDate(Date date){
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(date);
	    return dateString;
	  }
	 
	  /**
	   * 将时间戳转化为标准时间
	   * 输出:Wed Apr 19 12:47:36 CST 2017
	   */
	  public void timestampToDate(long times){
	    Date date = new Date(times);
	    System.out.println(date);
	  }
}

其他的时间获取方式:

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class DateUtils {
	
	  /**
	   * 获取现在时间
	   * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
	   */
	  public static Date getNowDate() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    ParsePosition pos = new ParsePosition(0);
	    Date currentTime2 = sdf.parse(dateString, pos);
	    return currentTime2;
	  }
	 
	  /**
	   * 获取现在时间
	   * @return返回短时间格式 yyyy-MM-dd
	   */
	  public static Date getNowDateShort() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    ParsePosition pos = new ParsePosition(0);
	    Date currentTime2 = sdf.parse(dateString, pos);
	    return currentTime2;
	  }
	 
	  /**
	   * 获取现在时间
	   * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
	   */
	  public static String getStringDate() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    return dateString;
	  }
	 
	  /**
	   * 获取现在时间
	   * @return 返回短时间字符串格式yyyy-MM-dd
	   */
	  public static String getStringDateShort() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    return dateString;
	  }
	 
	  /**
	   * 获取时间 小时:分:秒  HH:mm:ss
	   * @return
	   */
	  public static String getTimeShort() {
	    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.CHINA);
	    Date currentTime = new Date();
	    String dateString = sdf.format(currentTime);
	    return dateString;
	  }
	 
	  /**
	   * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
	   * @param strDate
	   * @return
	   */
	  public static Date strToDateLong(String strDate) {
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    ParsePosition pos = new ParsePosition(0);
	    Date strtodate = sdf.parse(strDate, pos);
	    return strtodate;
	  }
	 
	  /**
	   * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
	   * @param dateDate
	   * @return
	   */
	  public static String dateToStrLong(Date date) {
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(date);
	    return dateString;
	  }
	 
	  /**
	   * 将短时间格式时间转换为字符串 yyyy-MM-dd
	   * @param dateDate
	   * @return
	   */
	  public static String dateToStr(Date date) {
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    String dateString = sdf.format(date);
	    return dateString;
	  }
	 
	  /**
	   * 将短时间格式字符串转换为时间 yyyy-MM-dd
	   * @param strDate
	   * @return
	   */
	  public static Date strToDate(String strDate) {
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    ParsePosition pos = new ParsePosition(0);
	    Date strtodate = sdf.parse(strDate, pos);
	    return strtodate;
	  }
	 
	  /**
	   * 得到现在小时数
	   */
	  public static String getHour() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    String hour;
	    hour = dateString.substring(11, 13);
	    return hour;
	  }
	 
	  /**
	   * 得到现在分钟数
	   * @return
	   */
	  public static String getTime() {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    String min;
	    min = dateString.substring(14, 16);
	    return min;
	  }
	 
	  /**
	   * 根据用户输入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写。
	   * @param sformat yyyyMMddhhmmss
	   * @return
	   */
	  public static String getUserDate(String sformat) {
	    Date currentTime = new Date();
	    SimpleDateFormat sdf = new SimpleDateFormat(sformat, Locale.CHINA);
	    String dateString = sdf.format(currentTime);
	    return dateString;
	  }
	 
	  /**
	   * 二个小时时间之间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟
	   */
	  public static String getTwoHour(String st1, String st2) {
	    String[] kk = null;
	    String[] jj = null;
	    kk = st1.split(":");
	    jj = st2.split(":");
	    if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
	      return "0";
	    else {
	      double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
	      double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
	      if ((y - u) > 0)
	        return y - u + "";
	      else
	        return "0";
	    }
	  }
	 
	  /**
	   * 得到二个日期间的间隔天数
	   */
	  public static String getTwoDay(String sj1, String sj2) {
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    long day = 0;
	    try {
	      Date date = sdf.parse(sj1);
	      Date mydate = sdf.parse(sj2);
	      day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
	    } catch (Exception e) {
	      return "";
	    }
	    return day + "";
	  }
	 
	  /**
	   * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
	   */
	  public static String getNextDay(String nowdate, String delay) {
	    try {
	      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	      String mdate = "";
	      Date d = strToDate(nowdate);
	      long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
	      d.setTime(myTime * 1000);
	      mdate = sdf.format(d);
	      return mdate;
	    } catch (Exception e) {
	      return "";
	    }
	  }
	 
	  /**
	   * 判断是否润年
	   * @param ddate
	   * @return
	   */
	  public static boolean isLeapYear(String ddate) {
	    /**
	     * 详细设计: 
	     * 1.能被400整除是闰年 
	     * 2.不能被4整除则不是闰年
	     * 3.能被4整除同时不能被100整除则是闰年
	     * 4.能被4整除同时能被100整除则不是闰年
	     */
	    Date d = strToDate(ddate);
	    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
	    gc.setTime(d);
	    int year = gc.get(Calendar.YEAR);
	    if ((year % 400) == 0)
	      return true;
	    else if ((year % 4) == 0) {
	      if ((year % 100) == 0)
	        return false;
	      else
	        return true;
	    } else
	      return false;
	  }
	 
	  /**
	   * 获取一个月的最后一天
	   * @param dat
	   * @return
	   */
	  public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
	    String str = dat.substring(0, 8);
	    String month = dat.substring(5, 7);
	    int mon = Integer.parseInt(month);
	    if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
	      str += "31";
	    } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
	      str += "30";
	    } else {
	      if (isLeapYear(dat)) {
	        str += "29";
	      } else {
	        str += "28";
	      }
	    }
	    return str;
	  }
	 
	  /**
	   * 判断二个时间是否在同一个周
	   * @param date1
	   * @param date2
	   * @return
	   */
	  public static boolean isSameWeekDates(Date date1, Date date2) {
	    Calendar cal1 = Calendar.getInstance();
	    Calendar cal2 = Calendar.getInstance();
	    cal1.setTime(date1);
	    cal2.setTime(date2);
	    int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
	    if (0 == subYear) {
	      if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
	        return true;
	    } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
	      // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
	      if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
	        return true;
	    } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
	      if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
	        return true;
	    }
	    return false;
	  }
	 
	  /**
	   * 产生周序列,即得到当前时间所在的年度是第几周
	   * @return
	   */
	  public static String getSeqWeek() {
	    Calendar c = Calendar.getInstance(Locale.CHINA);
	    String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
	    if (week.length() == 1)
	      week = "0" + week;
	    String year = Integer.toString(c.get(Calendar.YEAR));
	    return year + "年" + week + "周";
	  }
	 
	  /**
	   * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号
	   * @param sdate
	   * @param num
	   * @return
	   */
	  public static String getWeek(String sdate, String num) {
	    // 再转换为时间
	    Date dd = DateUtils.strToDate(sdate);
	    Calendar c = Calendar.getInstance();
	    c.setTime(dd);
	    if (num.equals("1")) // 返回星期一所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
	    else if (num.equals("2")) // 返回星期二所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
	    else if (num.equals("3")) // 返回星期三所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
	    else if (num.equals("4")) // 返回星期四所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
	    else if (num.equals("5")) // 返回星期五所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
	    else if (num.equals("6")) // 返回星期六所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
	    else if (num.equals("0")) // 返回星期日所在的日期
	      c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
	    return new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(c.getTime());
	  }
	 
	  /**
	   * 根据一个日期,返回是星期几的字符串
	   * @param sdate
	   * @return
	   */
	  public static String getWeek(String sdate) {
	    // 再转换为时间
	    Date date = DateUtils.strToDate(sdate);
	    Calendar c = Calendar.getInstance();
	    c.setTime(date);
	    // int hour=c.get(Calendar.DAY_OF_WEEK);
	    // hour中存的就是星期几了,其范围 1~7
	    // 1=星期日 7=星期六,其他类推
	    return new SimpleDateFormat("EEEE", Locale.CHINA).format(c.getTime());
	  }
	 
	  public static String getWeekStr(String sdate) {
	    String str = "";
	    str = DateUtils.getWeek(sdate);
	    if ("1".equals(str)) {
	      str = "星期日";
	    } else if ("2".equals(str)) {
	      str = "星期一";
	    } else if ("3".equals(str)) {
	      str = "星期二";
	    } else if ("4".equals(str)) {
	      str = "星期三";
	    } else if ("5".equals(str)) {
	      str = "星期四";
	    } else if ("6".equals(str)) {
	      str = "星期五";
	    } else if ("7".equals(str)) {
	      str = "星期六";
	    }
	    return str;
	  }
	 
	  /**
	   * 两个时间之间的天数
	   * @param date1
	   * @param date2
	   * @return
	   */
	  public static long getDays(String date1, String date2) {
	    if (date1 == null || date1.equals(""))
	      return 0;
	    if (date2 == null || date2.equals(""))
	      return 0;
	    // 转换为标准时间
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    Date date = null;
	    Date mydate = null;
	    try {
	      date = sdf.parse(date1);
	      mydate = sdf.parse(date2);
	    } catch (Exception e) {
	    }
	    long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
	    return day;
	  }
	 
	  /**
	   * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
	   * 此函数返回该日历第一行星期日所在的日期
	   * @param sdate
	   * @return
	   */
	  public static String getNowMonth(String sdate) {
	    // 取该时间所在月的一号
	    sdate = sdate.substring(0, 8) + "01";
	 
	    // 得到这个月的1号是星期几
	    Date date = DateUtils.strToDate(sdate);
	    Calendar c = Calendar.getInstance();
	    c.setTime(date);
	    int u = c.get(Calendar.DAY_OF_WEEK);
	    String newday = DateUtils.getNextDay(sdate, (1 - u) + "");
	    return newday;
	  }
	 
	  /**
	   */
	  public static boolean RightDate(String date) {
	 
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.CHINA);
	    if (date == null)
	      return false;
	    if (date.length() > 10) {
	      sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.CHINA);
	    } else {
	      sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
	    }
	    try {
	      sdf.parse(date);
	    } catch (ParseException pe) {
	      return false;
	    }
	    return true;
	  }
	 
}

获取指定时间的年月日时分秒Google官网明确说明使用Calendar类,demo如下:

//获取指定时间的年月日时分秒(指定时间可能是已经发生过的、也可能是将来某一天要发生的)
			//1.获取Calendar实例对象
			Calendar calendar = Calendar.getInstance();
			//2.把字符串样式的日期按照指定日期格式转换成Date对象
			Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Local.CHINA).parse("2017-04-22 10:28:30");
			//3.把Date对象封装到Calendar实例中
			calendar.setTime(date);
			//4.从Calendar示例中获取需要的数据
			int year = calendar.get(Calendar.YEAR);
			int month = calendar.get(Calendar.MONTH) + 1;//月份是在0--11之间
			int day = calendar.get(Calendar.DAY_OF_MONTH);
			int weekday = calendar.get(Calendar.DAY_OF_WEEK);
			int hour = calendar.get(Calendar.HOUR_OF_DAY);
			int minute = calendar.get(Calendar.MINUTE);
			int second = calendar.get(Calendar.SECOND);
			System.out.println(year + "年");
			System.out.println(month + "月");
			System.out.println(day + "日");
			System.out.println("星期" + (weekday - 1));//每周的第一天是星期日
			System.out.println(hour + "时");
			System.out.println(minute + "分");
			System.out.println(second + "秒");

实际生活、工作中,经常遇到合同、房屋到期的情况,这就需要修改年月日,此时使用Calendar类的set(int field, int value)

比如说一年半,如下代码就可以实现:

year += 1;
				month += 6;
				calendar.set(Calendar.YEAR, year);
				calendar.set(Calendar.MONTH, month);


Date类和Calendar类的相互转换主要靠Calendar类的getTime()和setTime(Date)方法来实现的。

具体使用还是参照Google官网的Date和Calendar为主。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值