`
sshqwe
  • 浏览: 1037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java日期处理

阅读更多

package com.broadengate.core.commons.time;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import org.apache.log4j.Logger;

/**
* 日期处理的类
*
*/
public class DateUtils extends org.apache.commons.lang.time.DateUtils
{
/**
  * Logger for this class
  */
private static final Logger logger = Logger.getLogger(DateUtils.class);

/**
  * 日期格式化对象
  */
private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

private static DateFormat dateFormatCN = new SimpleDateFormat("yyyy年MM月dd日");

/**
  * 日期格式化对象
  */
private static DateFormat monthDateFormate = new SimpleDateFormat("MM-dd");
/**
  * 日期时间格式化对象
  */
private static DateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
/**
  * 时间格式化对象
  */
private static DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");

public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
  * 日期转换为字符窜:yyyy-mm-dd hh:mm:ss
  *
  * @param d
  * @return
  */
public static String timeToString(Date d)
{
  return sdf.format(d);
}

/**
  * 字符窜转换为日期:yyyy-mm-dd hh:mm:ss
  *
  * @param s
  * @return
  * @throws ParseException
  */
public static Date stringToDate(String s)
{
  if (s == null)
  {
   return null;
  }
  try
  {
   return sdf.parse(s);
  } catch (ParseException e)
  {
   // do nothing, just return null;
   return null;
  }
}

/**
  * 获取时间格式化对象 "yyyy-MM-dd"
  *
  * @return
  */
public static final DateFormat getDateFormat()
{
  return dateFormat;
}

/**
  * 获取时间日期格式化对象 "yyyy-MM-dd HH:mm"
  *
  * @return
  */
public static final DateFormat getDateTimeFormat()
{
  return dateTimeFormat;
}

/**
  * @return Returns the monthDateFormate.
  */
public static DateFormat getMonthDateFormate()
{
  return monthDateFormate;
}

/**
  * 获取当前时间的时间对象
  *
  * @return
  */
public static final Date nowDate()
{
  return new Date();
}

/**
  * 系统最小时间
  *
  * @return
  */
public static final Date minDate()
{
  return dateBegin(getDate(1900, 1, 1));
}

/**
  * 系统最大时间
  *
  * @return
  */
public static final Date maxDate()
{
  return dateEnd(getDate(2079, 1, 1));
}

/**
  * 获取指定时间的年
  *
  * @param date
  * @return
  */
public static final int year(Date date)
{
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  return calendar.get(Calendar.YEAR);
}

/**
  * 获取指定时间的月
  *
  * @param date
  * @return
  */
public static final int month(Date date)
{
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  return calendar.get(Calendar.MONTH) + 1;
}

/**
  * 获取指定时间的日
  *
  * @param date
  * @return
  */
public static final int day(Date date)
{
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  return calendar.get(Calendar.DATE);
}

/**
  * 获取一个时间对象
  *
  * @param year
  *            格式为:2004
  * @param month
  *            从1开始
  * @param date
  *            从1开始
  * @return
  */
public static final Date getDate(int year, int month, int date)
{
  Calendar calendar = Calendar.getInstance();
  calendar.set(year, month - 1, date);
  return calendar.getTime();
}

/**
  * 获取一个时间对象
  *
  * @param year
  *            格式为:2004
  * @param month
  *            从1开始
  * @param date
  *            从1开始
  * @param hour
  * @param minute
  * @param second
  * @return
  */
public static final Date getDateTime(int year, int month, int date, int hour, int minute, int second)
{
  Calendar calendar = Calendar.getInstance();
  calendar.set(year, month - 1, date, hour, minute, second);
  return calendar.getTime();
}

/**
  * 返回两个时间相差的天数
  *
  * @param d1
  * @param d2
  * @return
  */
public static int dateSub(String d1, String d2)
{
  int count = 0;
  if (d1 != null && d1.trim().length() > 0 && d2 != null && d2.trim().length() > 0)
  {
   count = (int) (DateUtils.parseDate(d1).getTime() / (24 * 60 * 60 * 1000) - DateUtils
     .parseDate(d2).getTime()
     / (24 * 60 * 60 * 1000));
  }
  return count;
}

/**
  * 返回两个时间相差的小时数
  *
  * @param a
  * @param b
  * @return
  */
public static final int subHour(Date a, Date b)
{
  int hour = (int) (b.getTime() / (60 * 60 * 1000) - a.getTime() / (60 * 60 * 1000));
  return hour  0)
  {
   beResult = 1;
  } else if ((d1.getTime() - d2.getTime())  0 && endDate != null
    && endDate.trim().length() > 0)
  {
   if (dateSub(startDate, endDate) == 0)
   {
    return new String[] { startDate };
   } else
   {
    Date start = DateUtils.parseDate(startDate);
    Date end = DateUtils.parseDate(endDate);
    int count = DateUtils.dateSub(end, start) + 1;
    dateSpace = new String[count];
    dateSpace[0] = DateUtils.formatDate(start);
    for (int i = 1; i = 0 && c.get(Calendar.HOUR_OF_DAY) = 0 && c.get(Calendar.HOUR_OF_DAY)  0)
  {
   // 处理第一天
   if (DateUtils.isAMorPM(startDate).equals("AM"))
   {
    list.add(DateUtils.formatDate(startDate) + "AM");
    list.add(DateUtils.formatDate(startDate) + "PM");
   }
   if (DateUtils.isAMorPM(startDate).equals("PM"))
   {
    list.add(DateUtils.formatDate(startDate) + "PM");
   }

   /** 处理第二天到结束日期的前一天 **/
   Date temp = DateUtils.addDate(startDate, 0, 0, 1);
   while (DateUtils.dateSub(endDate, temp) > 0)
   {
    list.add(DateUtils.formatDate(temp) + "AM");
    list.add(DateUtils.formatDate(temp) + "PM");
    temp = DateUtils.addDate(temp, 0, 0, 1);
   }

   // 处理最后一天
   if (DateUtils.isAMorPM(endDate).equals("AM"))
   {
    list.add(DateUtils.formatDate(endDate) + "AM");
   }
   if (DateUtils.isAMorPM(endDate).equals("PM"))
   {
    list.add(DateUtils.formatDate(endDate) + "AM");
    list.add(DateUtils.formatDate(endDate) + "PM");
   }
  }
  return list;
}

// 获得时间区间数据(比如2007-8-1到2007-8-30,将获得一个连续的时间数组dateSpace[]{"2007-8-1AM","2007-8-1PM","2007-8-2AM","2007-8-2PM"..."2007-8-30PM"}),精确到半天
public static Collection getHalfDateSpace(String startDate, String endDate)
{
  Collection list = null;
  if (startDate != null && startDate.trim().length() > 0 && endDate != null
    && endDate.trim().length() > 0)
  {
   Date start = parseDateTime(startDate);
   Date end = parseDateTime(endDate);
   list = new ArrayList();
   // 两个日期在同一天的情况
   if (dateSub(start, end) == 0)
   {
    if (isAMorPM(start).equals("AM") && isAMorPM(end).equals("PM"))
    {
     list.add(formatDate(start) + "AM");
     list.add(formatDate(start) + "PM");
    }
    if (isAMorPM(start).equals("AM") && isAMorPM(end).equals("AM"))
    {
     list.add(formatDate(start) + "AM");
    }
    if (isAMorPM(start).equals("PM") && isAMorPM(end).equals("PM"))
    {
     list.add(formatDate(start) + "PM");
    }
   }
   if (dateSub(endDate, startDate) > 0)
   {
    // 处理第一天
    if (DateUtils.isAMorPM(start).equals("AM"))
    {
     list.add(formatDate(start) + "AM");
     list.add(formatDate(start) + "PM");
    }
    if (DateUtils.isAMorPM(start).equals("PM"))
    {
     list.add(formatDate(start) + "PM");
    }

    /** 处理第二天到结束日期的前一天 **/
    Date temp = addDate(start, 0, 0, 1);
    String t = null;
    while (dateSub(end, temp) > 0)
    {
     list.add(formatDate(temp) + "AM");
     list.add(formatDate(temp) + "PM");
     temp = addDate(temp, 0, 0, 1);
    }

    // 处理最后一天
    if (DateUtils.isAMorPM(end).equals("AM"))
    {
     list.add(formatDate(end) + "AM");
    }
    if (DateUtils.isAMorPM(end).equals("PM"))
    {
     list.add(formatDate(end) + "AM");
     list.add(formatDate(end) + "PM");
    }
   }
  }
  return list;
}

// 获得时间区间数据(比如2007-8-1到2007-8-30,将获得一个连续的时间数组dateSpace[]{"2007-8-1AM","2007-8-1PM","2007-8-2AM","2007-8-2PM"..."2007-8-30PM"}),精确到半天
public static Collection getHalfDateSpace(Date startDate, int count)
{
  Collection list = new ArrayList();
  // 处理第一天
  list.add(formatDate(startDate) + "AM");
  list.add(formatDate(startDate) + "PM");

  /** 处理第二天到结束日期的前一天 **/
  Date temp = addDate(startDate, 0, 0, 1);
  int c = 1;
  while (c  0 && endDate != null
    && endDate.trim().length() > 0)
  {
   String[] s = getDateSpace(startDate, endDate);
   for (int i = 0; i  0)
  {
   for (Iterator i = list.iterator(); i.hasNext();)
   {
    String str = (String) i.next();
    if (strDate.equalsIgnoreCase(str))
    {
     beResult = true;
     break;
    }
   }
  }
  return beResult;
}

/**
  * 获取当前年的前若干年
  *
  * @return
  */
public static String[] getYearArray(int n)
{
  // 取当前年的前若干年
  String[] yearArray = new String[n];
  int y = year(nowDate());
  for (int i = 0; i

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics