日历

package xxx;


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author njchenyi
 */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;


public class FindDates {


public static void main(String[] args) throws ParseException {


new FindDates().test(Calendar.getInstance());
}


public static List<Date> findDates(Date dBegin, Date dEnd) {
List lDate = new ArrayList();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(dEnd);
while (dEnd.after(calBegin.getTime())) {
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}


/**
* 日 1 2 3 4 5 6 将一周的第几天转为下表 1 2 3 4 5 6 7

* @param dayOfWeek
* @return
*/
private int getDaySpacing(int dayOfWeek) {
if (Calendar.SUNDAY == dayOfWeek)
return 6;
else
return dayOfWeek - 2;
}


private int getDaySpacingEnd(int dayOfWeek) {
return 8 - dayOfWeek;
}


public void d(Calendar dateDisplay) {


Calendar cal;
Integer counter = 0;
if (dateDisplay != null)
cal = (Calendar) dateDisplay.clone();
else
cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd");
sdf.format(cal.getTime());
System.out.println(sdf.format(cal.getTime()));
// 回到日历当前月的第一天
cal.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(cal.getTime()));
// 当前月的第一天星期几
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
// 当天星期几与前一个月多余的几个星期1 2 3 。。
int daySpacing = getDaySpacing(cal.get(Calendar.DAY_OF_WEEK));
System.out.println(daySpacing);
// INFO : wrong calculations of first line - fixed
if (daySpacing > 0) {
Calendar prevMonth = (Calendar) cal.clone();
// 获取前一个月的
prevMonth.add(Calendar.MONTH, -1);
System.out.println(sdf.format(prevMonth.getTime()));
// 获取月的最大天数
// System.out.println(prevMonth.getActualMaximum(Calendar.DAY_OF_MONTH));
// 得到前一个月的间隔数的起始时间点
// prevMonth.getActualMaximum(Calendar.DAY_OF_MONTH)- daySpacing + 1
prevMonth.set(Calendar.DAY_OF_MONTH,
prevMonth.getActualMaximum(Calendar.DAY_OF_MONTH)
- daySpacing + 1);


for (int i = 0; i < daySpacing; i++) {


int x = Integer.valueOf(prevMonth.get(Calendar.DAY_OF_MONTH));
System.out.println("前一个月的:" + x);
counter++;
//日期加一天
prevMonth.add(Calendar.DAY_OF_MONTH, 1);
}
}
int firstDay = cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH,
cal.getActualMaximum(Calendar.DAY_OF_MONTH));
int lastDay = cal.get(Calendar.DAY_OF_MONTH) + 1;
// 得到当前月的天数 星期
for (int i = firstDay; i < lastDay; i++) {
cal.set(Calendar.DAY_OF_MONTH, i - 1);
Calendar date = (Calendar) cal.clone();
date.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(date.getTime()));
counter++;
}


if (dateDisplay != null)
cal = (Calendar) dateDisplay.clone();
else
cal = Calendar.getInstance();
System.out.println("--" + sdf.format(cal.getTime()));


cal.set(Calendar.DAY_OF_MONTH,
cal.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println("--" + sdf.format(cal.getTime()));


daySpacing = getDaySpacingEnd(cal.get(Calendar.DAY_OF_WEEK));
System.out.println("--" + cal.get(Calendar.DAY_OF_WEEK));


if (daySpacing > 0) {
for (int i = 0; i < daySpacing; i++) {
// 下一个月的
System.out.println(i + 1);
counter++;
}
}
}


public void test(Calendar dateDisplay) throws ParseException {
int x = dateDisplay.get(Calendar.DAY_OF_MONTH);
SimpleDateFormat dg = new SimpleDateFormat("yyyy年MM月dd日");
String xx = dg.format(dateDisplay.getTime());
System.out.println(xx);
String yy = xx.substring(0, 4);
int st = Integer.parseInt(yy) + 1;


String start = xx;


String end = xx.replace(yy, "" + st);
System.out.println("-" + end);


SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date dBegin = sdf.parse(start);
Date dEnd = sdf.parse(end);
List<Date> lDate = findDates(dBegin, dEnd);
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月dd日E");


for (Date date : lDate) {
System.out.println(sdf2.format(date));
}


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值