您的位置:首页 > 编程语言 > Java开发

java对日期的一些操作

2013-11-15 18:04 441 查看
package studyListAndMap;

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

public class JavasHelloWorld extends JavaA{
public static void main(String[] args) {
int currentMaxDays = getCurrentMonthDay();
int maxDaysByDate = getDaysByYearMonth(2012, 11);
String week = getDayOfWeekByDate("2012-12-25");
System.out.println("本月天数:" + currentMaxDays);
System.out.println("2012年11月天数:" + maxDaysByDate);
System.out.println("2012-12-25是:" + week);
}
/**
* 获取当月的 天数
* */
public static int getCurrentMonthDay() {

Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}

/**
* 根据年 月 获取对应的月份 天数
* */
public static int getDaysByYearMonth(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 static String getDayOfWeekByDate(String date) {
String dayOfweek = "-1";
try {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = myFormatter.parse(date);
SimpleDateFormat formatter = new SimpleDateFormat("E");
String str = formatter.format(myDate);
dayOfweek = str;

} catch (Exception e) {
System.out.println("错误!");
}
return dayOfweek;
}
}package net.zerosoft.common.util;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Component;

@Component
public class GetEveryDate {

private static transient int gregorianCutoverYear = 1582;

/** 闰年中每月天数 */
private static final int[] DAYS_P_MONTH_LY= {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

/** 非闰年中每月天数 */
private static final int[] DAYS_P_MONTH_CY= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

/** 代表数组里的年、月、日 */
private static final int Y = 0, M = 1, D = 2;

/**
* 将代表日期的字符串分割为代表年月日的整形数组
* @param date
* @return
*/
public static int[] splitYMD(String date){
date = date.replace("-", "");
int[] ymd = {0, 0, 0};
ymd[Y] = Integer.parseInt(date.substring(0, 4));
ymd[M] = Integer.parseInt(date.substring(4, 6));
ymd[D] = Integer.parseInt(date.substring(6, 8));
return ymd;
}

/**
* 检查传入的参数代表的年份是否为闰年
* @param year
* @return
*/
public static boolean isLeapYear(int year) {
return year >= gregorianCutoverYear ?
((year%4 == 0) && ((year%100 != 0) || (year%400 == 0))) : (year%4 == 0);
}

/**
* 日期加1天
* @param year
* @param month
* @param day
* @return
*/
private static int[] addOneDay(int year, int month, int day){
if(isLeapYear( year )){
day++;
if( day > DAYS_P_MONTH_LY[month -1 ] ){
month++;
if(month > 12){
year++;
month = 1;
}
day = 1;
}
}else{
day++;
if( day > DAYS_P_MONTH_CY[month -1 ] ){
month++;
if(month > 12){
year++;
month = 1;
}
day = 1;
}
}
int[] ymd = {year, month, day};
return ymd;
}

/**
* 将不足两位的月份或日期补足为两位
* @param decimal
* @return
*/
public static String formatMonthDay(int decimal){
DecimalFormat df = new DecimalFormat("00");
return df.format( decimal );
}

/**
* 将不足四位的年份补足为四位
* @param decimal
* @return
*/
public static String formatYear(int decimal){
DecimalFormat df = new DecimalFormat("0000");
return df.format( decimal );
}

/**
* 计算两个日期之间相隔的天数
* @param begin
* @param end
* @return
* @throws ParseException
*/
public static long countDay(String begin,String end){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate , endDate;
long day = 0;
try {
beginDate= format.parse(begin);
endDate=  format.parse(end);
day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}

/**
* 以循环的方式计算日期
* @param beginDate endDate
* @param days
* @return
*/
public static List<String> getEveryday(String beginDate , String endDate){
long days = countDay(beginDate, endDate);
int[] ymd = splitYMD( beginDate );
List<String> everyDays = new ArrayList<String>();
everyDays.add(beginDate);
for(int i = 0; i < days; i++){
ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
everyDays.add(formatYear(ymd[Y])+"-"+formatMonthDay(ymd[M])+"-"+formatMonthDay(ymd[D]));
}
return everyDays;
}

/* public static void main(String[] args) {
List<String> list = GetEveryDate.getEveryday("2013-12-01", "2014-02-13");
for (String result : list) {
System.out.println(result);
}
}*/

}
/**
* 获得两个日期之前相差的月份<br>
*
* @param start
* @param e
* @return
* @throws ParseException
*/
public int getMonth(String reStartDate, String reEndDate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = sdf.parse(reStartDate);
Date end = sdf.parse(reEndDate);
if (start.after(end)) {
Date t = start;
start = end;
end = t;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
Calendar temp = Calendar.getInstance();
temp.setTime(end);
temp.add(Calendar.DATE, 1);

int year = endCalendar.get(Calendar.YEAR)
- startCalendar.get(Calendar.YEAR);
int month = endCalendar.get(Calendar.MONTH)
- startCalendar.get(Calendar.MONTH);

if ((startCalendar.get(Calendar.DATE) == 1)
&& (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month + 1;
} else if ((startCalendar.get(Calendar.DATE) != 1)
&& (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month;
} else if ((startCalendar.get(Calendar.DATE) == 1)
&& (temp.get(Calendar.DATE) != 1)) {
return year * 12 + month;
} else {
return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
}
}


/**
* 得到某年某月第几个星期几的日期
* @param year
*            年份
* @param month
*            月份
* @param weekOfMonth
*            这个月的第几周
* @param dayOfWeek
*            星期几
* @return
*/
public String weekDateToData(int year, int month, int weekOfMonth,
int dayOfWeek) {
Calendar c = Calendar.getInstance();
// 计算出 x年 y月 1号 是星期几
c.set(year, month - 1, 1);

// 如果i_week_day =1 的话 实际上是周日
int i_week_day = c.get(Calendar.DAY_OF_WEEK);

int sumDay = 0;
// dayOfWeek+1 就是星期几(星期日 为 1)
if (i_week_day == 1) {
sumDay = (weekOfMonth - 1) * 7 + dayOfWeek + 1;
} else {
sumDay = 7 - i_week_day + 1 + (weekOfMonth - 1) * 7 + dayOfWeek + 1;
}
// 在1号的基础上加上相应的天数
c.set(Calendar.DATE, sumDay);
SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
return sf2.format(c.getTime());
}


/**
* 得到指定时间段中的所有周,以及每周的每天都是周几和日期是多少?
*
* @param start
* @param e
* @return
* @throws ParseException
*
*/
public List<Date> getWorkDay(String reStartDate,String reEndDate,String isWeek){
List<Date> list = new ArrayList<Date>();
Calendar c_begin = new GregorianCalendar();
Calendar c_end = new GregorianCalendar();
DateFormatSymbols dfs = new DateFormatSymbols();
String[] weeks = dfs.getWeekdays();//2013-09-10
System.out.println(reStartDate.substring(0, 4)+":"+reStartDate.substring(5, 7)+":"+reStartDate.substring(8,10));
c_begin.set(Integer.parseInt(reStartDate.substring(0, 4)),
Integer.parseInt(reStartDate.substring(5, 7))>=10?Integer.parseInt(reStartDate.substring(5, 7))-1:Integer.parseInt(reStartDate.substring(6, 7))-1,
Integer.parseInt(reStartDate.substring(8,10))>=10?Integer.parseInt(reStartDate.substring(8,10)):Integer.parseInt(reStartDate.substring(9,10))); //Calendar的月从0-11,所以4月是3.
c_end.set(Integer.parseInt(reEndDate.substring(0, 4)),
Integer.parseInt(reEndDate.substring(5, 7))>=10?Integer.parseInt(reEndDate.substring(5, 7))-1:Integer.parseInt(reEndDate.substring(6, 7))-1,
Integer.parseInt(reEndDate.substring(8,10))>=10?Integer.parseInt(reEndDate.substring(8,10)):Integer.parseInt(reEndDate.substring(9,10))); //Calendar的月从0-11,所以5月是4.
int count = 1;
c_end.add(Calendar.DAY_OF_YEAR, 1);  //结束日期下滚一天是为了包含最后一天
if(StringUtils.isBlank(isWeek)){//每天——》工作日
while(c_begin.before(c_end)){
//System.out.println("第"+count+"周  日期:"+new java.sql.Date(c_begin.getTime().getTime())+","+weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);
if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
count++;
}
c_begin.add(Calendar.DAY_OF_YEAR, 1);
if("星期六".equals(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])||"星期日".equals(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])){
continue;
}
list.add(new java.sql.Date(c_begin.getTime().getTime()));
}
list.remove(list.size() - 1);
return list;
}else{//每星期
Map<Integer,String> map = new HashMap<Integer,String>();
List<String> weekList = new ArrayList<String>();
map.put(1, "星期一");
map.put(2, "星期二");
map.put(3, "星期三");
map.put(4, "星期四");
map.put(5, "星期五");
map.put(6, "星期六");
map.put(0, "星期七");
String [] isWeekNumber = isWeek.split(",");
for(int j=0;j<isWeekNumber.length;j++){
weekList.add(map.get(Integer.parseInt(isWeekNumber[j])));
}

while(c_begin.before(c_end)){
//System.out.println("第"+count+"周  日期:"+new java.sql.Date(c_begin.getTime().getTime())+","+weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);
if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
count++;
}
c_begin.add(Calendar.DAY_OF_YEAR, 1);
if(!weekList.contains(weeks[c_begin.get(Calendar.DAY_OF_WEEK)])){//取得星期所对应的日期
continue;
}
list.add(new java.sql.Date(c_begin.getTime().getTime()));
}
return list;
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: