package com.tests;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class LCalendar {
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
public Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 获取现在时间
*
* @return 返回短时间字符串格式yyyy-MM-dd
*/
public String getStringDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 获取现在时间
*
* @return返回字符串格式 yyyy-MM-dd HH:mm:ss
*/
public String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* @param nowdate 格式为:yyyy-MM-dd
* @param delay 整数 正数为后延天数,负数为前移天数
* @param 方法功能 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
*/
public String getNextDay(String nowdate, String delay) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String mdate = "";
Date d = strToDate(nowdate);
long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60
* 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return mdate;
}
/**
* 根据日期获得这个日期所在的周的星期一和星期日的日期
*
* @param date
* @return
*/
public String[] getWeekOfDate(String date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(strToDate(date));
int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
String[] d = new String[2];
if (intWeek >= 1 && intWeek <= 6) {
if ((intWeek - 1) == 0) {
d[0] = date;
d[1] = getNextDay(date, "6");
} else {
d[0] = getNextDay(date, String.valueOf((1 - intWeek)));
d[1] = getNextDay(date, String.valueOf((7 - intWeek)));
}
} else {
d[0] = getNextDay(date, "-6");
d[1] = date;
}
return d;
}
/**
* 获得最近十五周
*
* @param date
* @return
*/
public String getWeekOfYear() {
StringBuffer wk;
Calendar c = Calendar.getInstance();
int w = c.get(Calendar.WEEK_OF_YEAR);
String week = String.valueOf(w);
if (week.length() == 1)
week = "今年第0" + week + "周";
else
week = "今年第" + week + "周";
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String date = formatter.format(currentTime);
wk = new StringBuffer(week + "," + date);
for (int i = 1; i < 15; i++) {
date = getNextDay(date, "-7");
w--;
if (w < 1) {
c.setTime(strToDate(date));
int w1 = c.get(Calendar.WEEK_OF_YEAR);
String week1 = String.valueOf(w1);
if (week1.length() == 1)
week1 = "去年第0" + week1 + "周";
else
week1 = "去年第" + week1 + "周";
wk.append("," + week1 + "," + date);
} else {
week = String.valueOf(w);
if (week.length() == 1)
week = "今年第0" + week + "周";
else
week = "今年第" + week + "周";
wk.append("," + week + "," + date);
}
}
return wk.toString();
}
/**
* 获得某一个日期所在的年的第几周
*
* @param date
* @return 返回格式如"2009年第05周"
*/
public String getWeekYear(String date) {
Calendar c = Calendar.getInstance();
c.setTime(strToDate(date));
int year = c.get(Calendar.YEAR);
String y = String.valueOf(year);
int w = c.get(Calendar.WEEK_OF_YEAR);
String week = String.valueOf(w);
if (week.length() == 1)
week = y+"年第0" + week + "周";
else
week = y+"年第" + week + "周";
return week;
}
/**
* 获得某一个日期所在的月的第几周
*
* @param date
* @return 返回格式如"2009年02月第05周"
*/
public String getWeekOfMonth(String date) {
Calendar c = Calendar.getInstance();
c.setTime(strToDate(date));
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
String y = String.valueOf(year);
String m = String.valueOf(month);
if(m.length()==1)m = "0"+m;
int w = c.get(Calendar.WEEK_OF_MONTH);
String week = String.valueOf(w);
if (week.length() == 1)
week = y+"年"+m+"月第0" + week + "周";
else
week = y+"年"+m+"月第" + week + "周";
return week;
}
/**
* 得到二个日期之间的天数
*/
public String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj2);
java.util.Date mydate = myFormatter.parse(sj1);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return String.valueOf(day);
}
/**
* 判断是否润年
*
* @param ddate
* @return
*/
public boolean isLeapYear(String ddate) {
/**
* 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被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 date
* @return
*/
public String getFirstDayOfMonth(String date)
{
String a[] = date.split("-");
String day;
day = a[0]+"-"+a[1]+"-01";
return day;
}
/**
* 取得一个月最后一天的日期
*
* @param date
* @return
*/
public String getLastDayOfMonth(String date)
{
String a[] = date.split("-");
int b = Integer.parseInt(a[1]);
String day;
if(b==2)
{
if(isLeapYear(date))
{
day = "29";
}else
{
day = "28";
}
}else if(b==2||b==4||b==6||b==9||b==11)
{
day = "30";
}
else
{
day = "31";
}
day = a[0]+"-"+a[1]+"-"+day;
return day;
}
/**
* 取得一个月有多少周
*
* @param date
* @return
*/
public int getMonthOfWeeks(String date)
{
String lastDay = getLastDayOfMonth(date);
Calendar cal = Calendar.getInstance();
cal.setTime(strToDate(lastDay));
int weeks = cal.get(Calendar.WEEK_OF_MONTH);
return weeks;
}
/**
* 根据一个日期,返回是星期几的字符串
*
* @param sdate
* @return
*/
public String getWeek(String sdate) {
// 再转换为时间
Date date = 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").format(c.getTime());
}
public String getWeekStr(String sdate){
String str = "";
str = 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;
}
/* public static void main(String[] args) {
Calendar c = Calendar.getInstance();
LCalendar cl = new LCalendar();
String ca = getTwoDay("2009-02-06","2009-02-10");
System.out.println(ca);
}*/
}