package javazy.zhangyan.zyutil;
import java.util.Calendar;
/**
* 日历操作相关类
*
* @author 张岩
* @version 0.0.1
*/
public class ZyCalendar {
/**
* 判断年份是否是闰年
* @param year 待判断的年份
* @return boolean 是闰年则返回true
*/
public boolean isLeapYear(int year) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
return true;
} else {
return false;
}
}
/**
* 解析日期字符串,返回对应的Calendar对象
* @param str 表示日期的字符串 <br>
* 其格式为"yyyy-mm-dd hh:mm:ss"或"yyyy-mm-dd"<br>
* 时分秒可写可不写,但若写则必须是正确的日期格式
* @return Calendar 解析后的Calendar实例
*/
public static Calendar getCalendar(String str) {
// 正则表达式解析字符串,以 " - 、 、 : " 分割字符串,变成字符串数组
String[] strings = str.split("-| |:", 6);
int[] date = new int[6];
// 循环将String数组转换为int型数组,数组元素为空则默认为0
for (int i = 0; i < strings.length; i++) {
if (!strings[i].equals("")) {
date[i] = Integer.valueOf(strings[i]);
} else {
date[i] = 0;
}
}
// 实例化Calendar对象
Calendar calendar = Calendar.getInstance();
// 为calendar对象赋值,设置其具体日期--------月份是从0开始计算的,故减一
calendar.set(date[0], date[1]-1, date[2], date[3], date[4], date[5]);
return calendar;
}
/**
* 计算两个日期时间之间的天数差
* @param calendar1 第一个日期
* @param calendar2 第二个日期
* @return -double 返回计算的结果(calendar2-calendar1),误差不超过0.1秒
*/
public static double getDayNumber(Calendar calendar1,Calendar calendar2) {
Long long1 = calendar1.getTimeInMillis();//获取日期的毫秒数
Long long2 = calendar2.getTimeInMillis();
Long gapMillis = long2-long1;//计算两个日期的差,以毫秒为单位
double gapDay = gapMillis/(1000*60*60*24.0);//将毫秒转换为天
return gapDay;
}
/**
* 输入一个日期,获得该天是星期几<br>
* 以格林尼治时间1900-01-01日为星期一为基准,只对1900年1月级之后的日期可用
* @param calendar 要判断星期几的日期
* @return int 返回该天是星期几<br>
* -该方法对格林尼治时间1900-01-01日之前的时间无效,
* 若传入的是1900-01-01日之前的时间则返回的是一个不确定的值
*/
public static int getWeekDay(Calendar calendar) {
// 实例化Calendar对象
Calendar cal = Calendar.getInstance();
// 为calendar对象赋值,设置其具体日期
cal.set(1900,00,01,00,00,00);//1900-01-01 00:00:00
//为避免零点误差,将传入日期的分钟数设为30,使日期至少距两天的交界点差一段时间(30分钟)
calendar.set(Calendar.MINUTE, 30);
int day = (int)(getDayNumber(cal, calendar));//获取该日期距离格林尼治时间的天数差
return day%7+1;
}
/**
* 输入一个日期,获得该天是星期几<br>
* 以格林尼治时间1900-01-01日为星期一为基准,只对1900年1月级之后的日期可用
* @param year 年
* @param month 月
* @param day 日
* @return int 返回该天是星期几<br>
* -该方法对格林尼治时间1900-01-01日之前的时间无效,
* -若传入的是1900-01-01日之前的时间则返回的是一个不确定的值
*/
public static int getWeekDay(int year,int month,int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month-1, day,11,00,00);//为避免零点误差,将时间设为一个中间值
return getWeekDay(calendar);
}
/**
* 返回一个用二维数组表示的一个月的日历--日期与星期互相对应,第一列为星期一,只对1900年1月级之后的日期可用
* @param calendar 要判断的日期量
* @return a int[][] 返回用数组表示的日历
*/
public static int[][] getWeek(Calendar calendar) {
int[][] week = new int[6][7];
calendar.set(Calendar.DATE, 1);//设置日期为1号
//计算数组第一个位置应填入的值,可以是负数,后面再调整
int day = 2 - getWeekDay(calendar);
//int a = 2-day;
int newDay = calendar.getActualMaximum(Calendar.DATE);//当前月份的最大天数
calendar.setLenient(false);//将日期设为非宽松的
calendar.add(Calendar.MONTH, -1);//月份减一
int beforDay = calendar.getActualMaximum(Calendar.DATE);//上一个月份最大天数
for (int i = 0; i < week.length; i++) {
for (int j = 0; j < week[i].length; j++) {
week[i][j] = day++;
if (week[i][j] > newDay) {
week[i][j] -= newDay;
}else if (week[i][j] < 1) {
week[i][j] += beforDay;
}
}
}
return week;
}
/**
* 返回一个用二维数组表示的一个月的日历--日期与星期互相对应,第一列为星期一,只对1900年1月级之后的日期可用
* @param year 年份
* @param month 月份
* @return a int[][] 返回用数组表示的日历
*/
public static int[][] getWeek(int year,int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month-1, 15);//为避免零点误差,将日期设为一个中间值
return getWeek(calendar);
}
/**
* 返回日期的字符串形式
* @param calendar 实例化日期
* @return YYYY-MM-DD 格式日期
*/
public static String getString(Calendar calendar) {
String time = "";
time += calendar.get(Calendar.YEAR) + "-";
time += (calendar.get(Calendar.MONDAY)+1) + "-";//因为月份是从0开始计的,故输出时+1
time += calendar.get(Calendar.DATE);
return time;
}
/**
* 返回日期的字符串形式
* @param calendar 实例化日期
* @return YYYY-MM-DD 格式日期
*/
public static String getStrings(Calendar calendar) {
String time = "";
time += calendar.get(Calendar.YEAR) + "-";
time += (calendar.get(Calendar.MONDAY)+1) + "-";//因为月份是从0开始计的,故输出时+1
time += calendar.get(Calendar.DATE);
time += calendar.get(Calendar.HOUR_OF_DAY);
time += calendar.get(Calendar.MINUTE);
time += calendar.get(Calendar.SECOND);
return time;
}
public static void main(String[] args) {
String cal1 = "2017-08-01 23:01:01";
String cal2 = "2017-03-02 23:01:01";
double a;
int[][] b = getWeek(2017,8);
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j] + "\t");
}
System.out.println();
}
System.out.println("这一月的天数为:"+getCalendar(cal1).getActualMaximum(Calendar.DATE));
System.out.println("这一天是星期:"+getWeekDay(getCalendar(cal1)));
a = getDayNumber(getCalendar(cal1), getCalendar(cal2));
System.out.println("天数差为:"+a);
int[][] week = new int[6][70];
System.out.println(week[5].length);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
long+util.zip (84个子文件)
long+util
源码
Tools
bin
javazy
zhangyan
zylang
ZyMath.class 1KB
ZyCharacter.class 834B
ZyString.class 1KB
zyutil
ZyArrays.class 4KB
ZyRandom.class 1KB
ZyScanner.class 826B
ZyCalendar.class 4KB
base
MyCalendar.class 1KB
MyNumber.class 619B
MyCalendarTest.class 872B
MyString.class 631B
.settings
org.eclipse.jdt.core.prefs 592B
src
javazy
zhangyan
zylang
ZyMath.java 1KB
ZyCharacter.java 507B
ZyString.java 1KB
zyutil
ZyScanner.java 684B
ZyArrays.java 5KB
ZyRandom.java 775B
ZyCalendar.java 6KB
base
MyCalendar.java 1KB
MyString.java 401B
MyNumber.java 584B
MyCalendarTest.java 435B
.project 381B
.classpath 377B
JavaDoc
Tools
doc
package-list 54B
javazy
zhangyan
zylang
ZyCharacter.html 9KB
package-summary.html 5KB
ZyString.html 11KB
package-frame.html 1KB
class-use
ZyCharacter.html 4KB
ZyString.html 4KB
ZyNumber.html 4KB
MyCharacter.html 4KB
package-tree.html 5KB
ZyNumber.html 9KB
package-use.html 4KB
MyCharacter.html 9KB
zyutil
package-summary.html 5KB
package-frame.html 1KB
ZyCalendar.html 16KB
class-use
ZyCalendar.html 4KB
ZyScanner.html 4KB
ZyArrays.html 4KB
package-tree.html 5KB
ZyScanner.html 9KB
package-use.html 4KB
ZyArrays.html 16KB
deprecated-list.html 3KB
base
package-summary.html 5KB
MyCalendarTest.html 9KB
package-frame.html 996B
class-use
MyCalendarTest.html 4KB
MyString.html 4KB
MyNumber.html 4KB
calendar.html 4KB
MyCalendar.html 4KB
package-tree.html 4KB
MyString.html 9KB
MyNumber.html 9KB
calendar.html 8KB
MyCalendar.html 9KB
package-use.html 4KB
help-doc.html 7KB
allclasses-frame.html 2KB
overview-summary.html 4KB
index.html 3KB
allclasses-noframe.html 1KB
overview-frame.html 978B
stylesheet.css 13KB
constant-values.html 3KB
index-files
index-10.html 5KB
index-7.html 5KB
index-11.html 8KB
index-1.html 4KB
index-8.html 5KB
index-9.html 6KB
index-6.html 6KB
index-5.html 5KB
index-3.html 7KB
index-2.html 5KB
index-4.html 7KB
overview-tree.html 5KB
script.js 857B
共 84 条
- 1
资源评论
再见残月
- 粉丝: 8
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 操作系统实验ucore lab3
- DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题 下面我将对程序进行详
- final_work_job1(1).sql
- 区块链与联邦学习结合:FedChain项目详细复现指南
- 西门子S7 和 S7 Plus 协议开发示例
- 模块化多电平变流器 MMC 的VSG控制 同步发电机控制 MATLAB–Simulink仿真模型 5电平三相MMC,采用VSG控制 受端接可编辑三相交流源,直流侧接无穷大电源提供调频能量 设置频率
- 微电网(两台)主从控制孤岛-并网平滑切的分析 分析了: 1.孤岛下VF控制 2.并网下PQ控制 3.孤岛下主从控制 4.孤岛到并网的平滑切控制 5.除模型外还对分布式发电与主动配电网一些常见问题做了
- 第四组二手产品.zip
- 基于小程序的智慧物业平台源代码(java+小程序+mysql+LW).zip
- MVIMG_20241222_194113.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功