Android开发中日期工具类DateUtil完整实例

本文实例讲述了Android开发中日期工具类DateUtil。分享给大家供大家参考,具体如下:

/**
 * 日期操作工具类.
 * @Project  ERPForAndroid
 * @Package  com.ymerp.android.tools
 * @author   chenlin
 * @version  1.0
 */
@SuppressLint("SimpleDateFormat")
public class DateUtil {
  private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
  private static final SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
  public static Date str2Date(String str) {
    return str2Date(str, null);
  }
  /**
   * 字符串转时间
   * @param str
   * @param format
   * @return
   */
  public static Date str2Date(String str, String format) {
    if (str == null || str.length() == 0) {
      return null;
    }
    if (format == null || format.length() == 0) {
      format = FORMAT;
    }
    Date date = null;
    try {
      SimpleDateFormat sdf = new SimpleDateFormat(format);
      date = sdf.parse(str);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return date;
  }
  public static Calendar str2Calendar(String str) {
    return str2Calendar(str, null);
  }
  public static Calendar str2Calendar(String str, String format) {
    Date date = str2Date(str, format);
    if (date == null) {
      return null;
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c;
  }
  public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss
    return date2Str(c, null);
  }
  public static String date2Str(Calendar c, String format) {
    if (c == null) {
      return null;
    }
    return date2Str(c.getTime(), format);
  }
  public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss
    return date2Str(d, null);
  }
  public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
    if (d == null) {
      return null;
    }
    if (format == null || format.length() == 0) {
      format = FORMAT;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    String s = sdf.format(d);
    return s;
  }
  public static String getCurDateStr() {
    Calendar c = Calendar.getInstance();
    c.setTime(new Date());
    return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH) + "-"
        + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
  }
  /**
   * 获得当前日期的字符串格式
   *
   * @param format
   * @return
   */
  public static String getCurDateStr(String format) {
    Calendar c = Calendar.getInstance();
    return date2Str(c, format);
  }
  /**
   * 格式到秒
   *
   * @param time
   * @return
   */
  public static String getMillon(long time) {
    return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(time);
  }
  /**
   * 格式到天
   *
   * @param time
   * @return
   */
  public static String getDay(long time) {
    return new SimpleDateFormat("yyyy-MM-dd").format(time);
  }
  /**
   * 格式到毫秒
   *
   * @param time
   * @return
   */
  public static String getSMillon(long time) {
    return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time);
  }
  /**
   * 字符串转换到时间格式
   *
   * @param dateStr
   *      需要转换的字符串
   * @param formatStr
   *      需要格式的目标字符串 举例 yyyy-MM-dd
   * @return Date 返回转换后的时间
   * @throws ParseException
   *       转换异常
   */
  public static Date StringToDate(String dateStr, String formatStr) {
    DateFormat sdf = new SimpleDateFormat(formatStr);
    Date date = null;
    try {
      date = sdf.parse(dateStr);
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return date;
  }
  /**
   * 转化时间输入时间与当前时间的间隔
   *
   * @param timestamp
   * @return
   */
  public static String converTime(long timestamp) {
    long currentSeconds = System.currentTimeMillis() / 1000;
    long timeGap = currentSeconds - timestamp;// 与现在时间相差秒数
    String timeStr = null;
    if (timeGap > 24 * 60 * 60) {// 1天以上
      timeStr = timeGap / (24 * 60 * 60) + "天前";
    } else if (timeGap > 60 * 60) {// 1小时-24小时
      timeStr = timeGap / (60 * 60) + "小时前";
    } else if (timeGap > 60) {// 1分钟-59分钟
      timeStr = timeGap / 60 + "分钟前";
    } else {// 1秒钟-59秒钟
      timeStr = "刚刚";
    }
    return timeStr;
  }
  /**
   * 把字符串转化为时间格式
   *
   * @param timestamp
   * @return
   */
  public static String getStandardTime(long timestamp) {
    SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
    Date date = new Date(timestamp * 1000);
    sdf.format(date);
    return sdf.format(date);
  }
  /**
   * 获得当前日期时间 日期时间格式yyyy-MM-dd HH:mm:ss
   *
   * @return
   */
  public static String currentDatetime() {
    return datetimeFormat.format(now());
  }
  /**
   * 格式化日期时间 日期时间格式yyyy-MM-dd HH:mm:ss
   *
   * @return
   */
  public static String formatDatetime(Date date) {
    return datetimeFormat.format(date);
  }
  /**
   * 获得当前时间 时间格式HH:mm:ss
   *
   * @return
   */
  public static String currentTime() {
    return timeFormat.format(now());
  }
  /**
   * 格式化时间 时间格式HH:mm:ss
   *
   * @return
   */
  public static String formatTime(Date date) {
    return timeFormat.format(date);
  }
  /**
   * 获得当前时间的<code>java.util.Date</code>对象
   *
   * @return
   */
  public static Date now() {
    return new Date();
  }
  public static Calendar calendar() {
    Calendar cal = GregorianCalendar.getInstance(Locale.CHINESE);
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    return cal;
  }
  /**
   * 获得当前时间的毫秒数
   *
   * 详见{@link System#currentTimeMillis()}
   *
   * @return
   */
  public static long millis() {
    return System.currentTimeMillis();
  }
  /**
   *
   * 获得当前Chinese月份
   *
   * @return
   */
  public static int month() {
    return calendar().get(Calendar.MONTH) + 1;
  }
  /**
   * 获得月份中的第几天
   *
   * @return
   */
  public static int dayOfMonth() {
    return calendar().get(Calendar.DAY_OF_MONTH);
  }
  /**
   * 今天是星期的第几天
   *
   * @return
   */
  public static int dayOfWeek() {
    return calendar().get(Calendar.DAY_OF_WEEK);
  }
  /**
   * 今天是年中的第几天
   *
   * @return
   */
  public static int dayOfYear() {
    return calendar().get(Calendar.DAY_OF_YEAR);
  }
  /**
   * 判断原日期是否在目标日期之前
   *
   * @param src
   * @param dst
   * @return
   */
  public static boolean isBefore(Date src, Date dst) {
    return src.before(dst);
  }
  /**
   * 判断原日期是否在目标日期之后
   *
   * @param src
   * @param dst
   * @return
   */
  public static boolean isAfter(Date src, Date dst) {
    return src.after(dst);
  }
  /**
   * 判断两日期是否相同
   *
   * @param date1
   * @param date2
   * @return
   */
  public static boolean isEqual(Date date1, Date date2) {
    return date1.compareTo(date2) == 0;
  }
  /**
   * 判断某个日期是否在某个日期范围
   *
   * @param beginDate
   *      日期范围开始
   * @param endDate
   *      日期范围结束
   * @param src
   *      需要判断的日期
   * @return
   */
  public static boolean between(Date beginDate, Date endDate, Date src) {
    return beginDate.before(src) && endDate.after(src);
  }
  /**
   * 获得当前月的最后一天
   *
   * HH:mm:ss为0,毫秒为999
   *
   * @return
   */
  public static Date lastDayOfMonth() {
    Calendar cal = calendar();
    cal.set(Calendar.DAY_OF_MONTH, 0); // M月置零
    cal.set(Calendar.HOUR_OF_DAY, 0);// H置零
    cal.set(Calendar.MINUTE, 0);// m置零
    cal.set(Calendar.SECOND, 0);// s置零
    cal.set(Calendar.MILLISECOND, 0);// S置零
    cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);// 月份+1
    cal.set(Calendar.MILLISECOND, -1);// 毫秒-1
    return cal.getTime();
  }
  /**
   * 获得当前月的第一天
   *
   * HH:mm:ss SS为零
   *
   * @return
   */
  public static Date firstDayOfMonth() {
    Calendar cal = calendar();
    cal.set(Calendar.DAY_OF_MONTH, 1); // M月置1
    cal.set(Calendar.HOUR_OF_DAY, 0);// H置零
    cal.set(Calendar.MINUTE, 0);// m置零
    cal.set(Calendar.SECOND, 0);// s置零
    cal.set(Calendar.MILLISECOND, 0);// S置零
    return cal.getTime();
  }
  private static Date weekDay(int week) {
    Calendar cal = calendar();
    cal.set(Calendar.DAY_OF_WEEK, week);
    return cal.getTime();
  }
  /**
   * 获得周五日期
   *
   * 注:日历工厂方法{@link #calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday
   *
   * @return
   */
  public static Date friday() {
    return weekDay(Calendar.FRIDAY);
  }
  /**
   * 获得周六日期
   *
   * 注:日历工厂方法{@link #calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday
   *
   * @return
   */
  public static Date saturday() {
    return weekDay(Calendar.SATURDAY);
  }
  /**
   * 获得周日日期 注:日历工厂方法{@link #calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday
   *
   * @return
   */
  public static Date sunday() {
    return weekDay(Calendar.SUNDAY);
  }
  /**
   * 将字符串日期时间转换成java.util.Date类型 日期时间格式yyyy-MM-dd HH:mm:ss
   *
   * @param datetime
   * @return
   */
  public static Date parseDatetime(String datetime) throws ParseException {
    return datetimeFormat.parse(datetime);
  }
  /**
   * 将字符串日期转换成java.util.Date类型 日期时间格式yyyy-MM-dd
   *
   * @param date
   * @return
   * @throws ParseException
   */
  public static Date parseDate(String date) throws ParseException {
    return dateFormat.parse(date);
  }
  /**
   * 将字符串日期转换成java.util.Date类型 时间格式 HH:mm:ss
   *
   * @param time
   * @return
   * @throws ParseException
   */
  public static Date parseTime(String time) throws ParseException {
    return timeFormat.parse(time);
  }
  /**
   * 根据自定义pattern将字符串日期转换成java.util.Date类型
   *
   * @param datetime
   * @param pattern
   * @return
   * @throws ParseException
   */
  public static Date parseDatetime(String datetime, String pattern) throws ParseException {
    SimpleDateFormat format = (SimpleDateFormat) datetimeFormat.clone();
    format.applyPattern(pattern);
    return format.parse(datetime);
  }
  /**
   * 把秒格式化为分种小时
   *
   * @param second
   * @return
   */
  public static String parseSecond(int second) {
    if (second >= 60) {
      return second / 60 + "分";
    } else if (second >= 60 * 60) {
      return second / 60 * 60 + "时";
    } else if (second >= 60 * 60 * 24) {
      return second / 60 * 60 + "天";
    } else {
      return second + "秒";
    }
  }
  /**
   * 比较时间大小
   * @param begin
   * @param end
   * @return
   */
  public static int compareDate(String begin, String end) {
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    try {
      Date beginDate = df.parse(begin);
      Date endDate = df.parse(end);
      if (beginDate.getTime() < endDate.getTime()) {
        return 1;
      } else if (beginDate.getTime() > endDate.getTime()) {
        return -1;
      } else {
        return 0;
      }
    } catch (Exception exception) {
      exception.printStackTrace();
    }
    return 0;
  }
  /**
   * 获得年份
   * @param date
   * @return
   */
  public int getYear(Date date){
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c.get(Calendar.YEAR);
  }
  /**
   * 获得月份
   * @param date
   * @return
   */
  public int getMonth(Date date){
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c.get(Calendar.MONTH) + 1;
  }
  /**
   * 获得星期几
   * @param date
   * @return
   */
  public int getWeek(Date date){
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c.get(Calendar.WEEK_OF_YEAR);
  }
  /**
   * 获得日期
   * @param date
   * @return
   */
  public int getDay(Date date){
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c.get(Calendar.DATE);
  }
  /**
   * 获得天数差
   * @param begin
   * @param end
   * @return
   */
  public long getDayDiff(Date begin, Date end){
    long day = 1;
    if(end.getTime() < begin.getTime()){
      day = -1;
    }else if(end.getTime() == begin.getTime()){
      day = 1;
    }else {
      day += (end.getTime() - begin.getTime())/(24 * 60 * 60 * 1000) ;
    }
    return day;
  }
}

PS:这里再为大家推荐几款关于日期与时间计算的在线工具供大家参考使用:

在线日期/天数计算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi

在线万年历日历:
http://tools.jb51.net/bianmin/wannianli

在线阴历/阳历转换工具:
http://tools.jb51.net/bianmin/yinli2yangli

Unix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android日期与时间操作技巧总结》、《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android日期显示和日期选择库

    日期显示和选择类库,可以用来选择一段连续的和多个不连续的日期,具体的UI完全抽象出来了,可以高度自定义(GITHUB地址) 支持的功能: 1.选择一段连续的和多个不连续的日期 2.提供了两个工具类(SingleMonthSelector.CalendarSelector)用来处理单个月和多个连续月日期的选择 3.可以拦截选择事件,当选择的日期长度有限制或某些特殊的日期不可以选择时,可以中断这次选择事件 4.SingleMonthSelector.CalendarSelector两个工具类都支持状

  • Android开发之时间日期组件用法实例

    继上一篇时间和日期设置的示例之后,今天来介绍Android的布局组件中有关于时间和日期的设置的组件,希望对大家有所帮助.具体如下: 时间日期设置组件:TimePicker.DatePicker 在布局文件中直接可以添加到我们的布局样式中,具体代码如下: <LinearLayout android:id="@+id/linear1" android:orientation="vertical" android:layout_width="fill_pa

  • 很实用的Android日期计算类

    分享一个使用较方便的日期计算类: package com.utils.datecount; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; public class DateCount { /** * datelevel 0为7天内,1为7到15天,2为15天以上 */ public static int datelevel = 0; public stat

  • Android中日期与时间设置控件用法实例

    本文实例讲述了Android中日期与时间设置控件用法.分享给大家供大家参考.具体如下: 1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码: 页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextView控件,用于显示设置后的系统时间 main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x

  • android实现双日期选择控件(可隐藏日,只显示年月)

    在安卓开发中,会碰到选开始日期和结束日期的问题.特别是在使用Pad时,如果弹出一个Dialog,能够同时选择开始日期和结束日期,那将是极好的.我在开发中在DatePickerDialog的基础上做了修改,实现了这种Dialog.效果如下: 具体实现方法为: 先新建一个安卓项目DoubleDatePicker,在res/layout文件夹下新建date_picker_dialog.xml,内容如下: <?xml version="1.0" encoding="utf-8&

  • android 一些工具类汇总

    一 Paint ,Canvas public class drawView extends View{ private Paint paint1; public drawView(Context context,AttributeSet set ){ super(context,set); } public void onDraw(Canvas canvas){ super.onDraw(canvas); //new 一个画笔对象 paint1= new Paint(); canvas.draw

  • Android时间日期拾取器学习使用(DatePicker、TimePicker)

    为了能够让用户选择时间日期,安卓提供了DatePicker日期拾取器和TimePicker时间拾取器.这两个组建的使用十分简单,在eclipse的可视化界面上直接拖拽到布局中即可.当用户在事件日期选择器上进行选择之后,需要加将用户的选择读取出来,这需要给组件添加相应的监听器. 一.日期拾取器 1.在eclipse可视化界面上拖拽组件到布局中 <DatePicker android:id="@+id/datePicker1" android:layout_width="w

  • Android编程实现根据不同日期计算天数差的方法

    本文实例讲述了Android编程实现根据不同日期计算天数差的方法.分享给大家供大家参考,具体如下: Calendar cal1 = getCalendarFromDate(mStartDate); long startTime = cal1.getTimeInMillis(); Calendar cal2 = getCalendarFromDate(mEndDate); long endTime = cal2.getTimeInMillis(); int numberOfDays = (int)

  • Android开发之时间日期操作实例

    相信对于手机的时间日期设置大家一定都不陌生吧,今天举一个关于时间日期设置的示例,其中有些许不完善之处,例如如何使设置的时间日期和手机系统同步等.感兴趣的读者可以根据自身经验加以完善. 现来看看具体示例,希望对大家有所帮助. 首先是时间设置: .java文件(MainActivity.java)代码如下: package com.example.activity_time_date; import java.util.Calendar; import android.app.Activity; i

  • Android时间选择器、日期选择器实现代码

    本文为大家分享了两款选择器,一款可以针对时间进行选择.一款可以针对日期进行选择,供大家参考,具体内容如下 一.时间选择器 1.1.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

  • Android之日期及时间选择对话框用法实例分析

    本文实例讲述了Android之日期及时间选择对话框用法.分享给大家供大家参考.具体如下: 清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.dialog" android:versionCode=&q

随机推荐