知其然,知其所以然
此博文的依据:hutool-565版本源码
获得年的部分
源码的DateTimeof(date)year()可拆解成两部分
第一部分,看代码很好理解,就是类型的转化
第二部分,
从代码跟下来,可以发现会走到 toCalendar()get(field)
toCalendar()会得到Calendar,这会就好理解可以获取年了。
不止可以获取年,还可以获取年,月,日,时,分,秒。详细介绍可以看这里:万字博文教你搞懂java源码的日期和时间相关用法
获得指定日期所属季度,从1开始计数
源码的DateTimeof(date)quarter()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,month()获取DateTime对应的月份,然后再做了一个简单计算。
getField方法上面有介绍了,这里就不水字了。
获得指定日期所属季度,返回的是季度枚举对象Quarter
源码的DateTimeof(date)quarterEnum()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,quarter()上面有源码分析,结论是获取 获得当前日期所属季度,从1开始计数
Quarterof(int)就是把对应的数值转为对应的枚举Quarter
获得月份,从0开始计数
源码的DateTimeof(date)month()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得月份,返回月份枚举对象Month
源码的DateTimeof(date)monthEnum()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,month()是获得月份,从0开始计数
Monthof(int)就是把对应的数值转为对应的枚举Month
获得指定日期是所在年份的第几周
此方法返回值与一周的第一天有关,比如:
2016年1月3日为周日,如果一周的第一天为周日,那这天是第二周(返回2)
如果一周的第一天为周一,那这天是第一周(返回1)
跨年的那个星期得到的结果总是1
源码的DateTimeof(date)weekOfYear()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期是所在月份的第几周
源码的DateTimeof(date)year()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期是这个日期所在月份的第几天
源码的DateTimeof(date)dayOfMonth()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期是这个日期所在年的第几天
源码的DateTimeof(date)dayOfYear()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期是星期几,1表示周日,2表示周一
源码的DateTimeof(date)dayOfWeek()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期是星期几
源码的DateTimeof(date)dayOfWeekEnum()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,dayOfWeek()是获得指定日期是星期几,1表示周日,2表示周一
Weekof(int)就是把对应的数值转为对应的枚举Week
获得指定日期的小时数部分
源码的DateTimeof(date)hour(is24HourClock)可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
is24HourClock DateFieldHOUR_OF_DAY : DateFieldHOUR :is24HourClock 是否24小时制
DateFieldHOUR_OF_DAY :小时,用于24小时制
DateFieldHOUR :小时,用于12小时制
获得指定日期的分钟数部分
例如:10:04:15250 =》 4
源码的DateTimeof(date)minute()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期的秒数部分
源码的DateTimeof(date)second()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
获得指定日期的毫秒数部分
源码的DateTimeof(date)millisecond()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
是否为上午
源码的DateTimeof(date)isAM()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
做了一个判断 CalendarAM == getField(DateFieldAM_PM)
是否为下午
源码的DateTimeof(date)isPM()可拆解成两部分
DateTimeof(date)上面有介绍了,这里就不水字了。
第二部分,getField方法上面有介绍了,这里就不水字了。
做了一个判断 CalendarPM== getField(DateFieldAM_PM)
返回今年
源码的year(date())可拆解成两部分
DateTimedate()
返回当前月份
源码的month(date())可拆解成两部分
DateTimedate()
返回当前月份
源码的monthEnum(date())可拆解成两部分
DateTimedate()
返回当前日期所在年份的第几周
源码的weekOfYear(date())可拆解成两部分
DateTimedate()
返回当前日期所在月份的第几周
源码的weekOfMonth(date())可拆解成两部分
DateTimedate()
返回当前日期是这个日期所在月份的第几天
源码的dayOfMonth(date())可拆解成两部分
DateTimedate()
返回当前日期是星期几
源码的dayOfWeek(date())可拆解成两部分
DateTimedate()
返回当前日期是星期几
源码的dayOfWeekEnum(date())可拆解成两部分
DateTimedate()
返回当前日期的小时数部分
源码的hour(date(), is24HourClock)可拆解成两部分
DateTimedate()
返回当前日期的分钟数部分
源码的minute(date())可拆解成两部分
DateTimedate()
返回当前日期的秒数部分
源码的second(date())可拆解成两部分
DateTimedate()
返回当前日期的毫秒数部分
源码的millisecond(date())可拆解成两部分
DateTimedate()
获得指定日期年份和季节
格式:[20131]表示2013年第一季度
源码的yearAndQuarter(calendar(date))可拆解成两部分
yearAndQuarter方法代码分析:
获取年份 calget(CalendarYEAR)
获取季度 calget(CalendarMONTH) / 3 + 1
然后通过StringBuilder拼接字符串
获得指定日期区间内的年份和季节
如上面代码所示,有个判空处理
然后,写了一个while循环,把符合条件的年份和季度存到LinkedHashSet里,存完一个年份和季度的字符串后,会给开始时间增加3个月,如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class Main {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public static void main(String args[]) {
Date d = new Date();
// 月初
Systemoutprintln("月初" + sdfformat(getMonthStart(d)));
// 月末
Systemoutprintln("月末" + sdfformat(getMonthEnd(d)));
Date date = getMonthStart(d);
Date monthEnd = getMonthEnd(d);
while (!dateafter(monthEnd)) {
Systemoutprintln(sdfformat(date));
date = getNext(date);
}
}
private static Date getMonthStart(Date date) {
Calendar calendar = CalendargetInstance();
calendarsetTime(date);
int index = calendarget(CalendarDAY_OF_MONTH);
calendaradd(CalendarDATE, (1 - index));
return calendargetTime();
}
private static Date getMonthEnd(Date date) {
Calendar calendar = CalendargetInstance();
calendarsetTime(date);
calendaradd(CalendarMONTH, 1);
int index = calendarget(CalendarDAY_OF_MONTH);
calendaradd(CalendarDATE, (-index));
return calendargetTime();
}
private static Date getNext(Date date) {
Calendar calendar = CalendargetInstance();
calendarsetTime(date);
calendaradd(CalendarDATE, 1);
return calendargetTime();
}
}
这是一个月的 你改改就能写出上个月的了吧
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
import javautilTimeZone;
public class NewTest {
public static void main(String args[]) {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = CalendargetInstance();
Systemoutprintln("=========LastWeek Days=========");
caladd(CalendarWEEK_OF_MONTH, -1);
for (int i = 0; i < 7; i++) {
caladd(CalendarDATE, -1 calget(CalendarDAY_OF_WEEK) + 2 + i);
Systemoutprintln(sfformat(calgetTime()));
}
Systemoutprintln("=========ThisMonth Days=========");
cal = CalendargetInstance();
calset(calget(CalendarYEAR), calget(CalendarMONTH), 1);
caladd(CalendarMONTH, 1);
caladd(CalendarDATE, -1);
String lastDay = sfformat(calgetTime());
String aDay = "";
int i = 1;
while (!lastDayequals(aDay)) {
calset(calget(CalendarYEAR), calget(CalendarMONTH), i);
aDay = sfformat(calgetTime());
Systemoutprintln(sfformat(calgetTime()));
i++;
}
Systemoutprintln("=========LastMonth Days=========");
cal = CalendargetInstance();
calset(calget(CalendarYEAR), calget(CalendarMONTH), 1);
caladd(CalendarDATE, -1);
lastDay = sfformat(calgetTime());
i = 1;
while (!lastDayequals(aDay)) {
calset(calget(CalendarYEAR), calget(CalendarMONTH), i);
aDay = sfformat(calgetTime());
Systemoutprintln(sfformat(calgetTime()));
i++;
}
}
}
1、使用new Date()获取当前日期,new Date()getTime()获取当前毫秒数
2、计算公式,等于获取的当前日期减去或者加上一天的毫秒数。一天的毫秒数的计算公式:24小时60分钟60秒1000毫秒,也是86400000毫秒。
举例:
Date curDate = new Date();
var preDate = new Date(curDategetTime() - 2460601000); //前一天
var nextDate = new Date(curDategetTime() + 2460601000); //后一天
以下使用后台输出表示。
扩展资料
var myDate = new Date();
myDategetYear(); //获取当前年份(2位)
myDategetFullYear(); //获取完整的年份(4位,1970-)
myDategetMonth(); //获取当前月份(0-11,0代表1月)
myDategetDate(); //获取当前日(1-31)
myDategetDay(); //获取当前星期X(0-6,0代表星期天)
myDategetTime(); //获取当前时间(从197011开始的毫秒数)
myDategetHours(); //获取当前小时数(0-23)
myDategetMinutes(); //获取当前分钟数(0-59)
myDategetSeconds(); //获取当前秒数(0-59)
myDategetMilliseconds(); //获取当前毫秒数(0-999)
myDatetoLocaleDateString(); //获取当前日期
var mytime=myDatetoLocaleTimeString(); //获取当前时间
myDatetoLocaleString( ); //获取日期与时间
DateprototypeisLeapYear 判断闰年
DateprototypeFormat 日期格式化
DateprototypeDateAdd 日期计算
DateprototypeDateDiff 比较日期差
DateprototypetoString 日期转字符串
DateprototypetoArray 日期分割为数组
DateprototypeDatePart 取日期的部分信息
DateprototypeMaxDayOfDate 取日期所在月的最大天数
DateprototypeWeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差
可以通过日期的add(CalendarMONTH, 1)方法进行月份切换,输出每个满足条件的值
Date d1 = new SimpleDateFormat("yyyy-MM")parse("2015-6");//定义起始日期
Date d2 = new SimpleDateFormat("yyyy-MM")parse("2016-5");//定义结束日期
Calendar dd = CalendargetInstance();//定义日期实例
ddsetTime(d1);//设置日期起始时间
while(ddgetTime()before(d2)){//判断是否到结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String str = sdfformat(ddgetTime());
Systemoutprintln(str);//输出日期结果
ddadd(CalendarMONTH, 1);//进行当前日期月份加1
}
结果:
一 获取当前系统时间和日期并格式化输出:\x0d\\x0d\import javautilDate; \x0d\import javatextSimpleDateFormat;\x0d\\x0d\public class NowString { \x0d\ public static void main(String[] args) { \x0d\ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式\x0d\ Systemoutprintln(dfformat(new Date()));// new Date()为获取当前系统时间\x0d\ } \x0d\} \x0d\\x0d\二 在数据库里的日期只以年-月-日的方式输出,可以用下面两种方法:\x0d\\x0d\1、用convert()转化函数:\x0d\\x0d\String sqlst = "select convert(varchar(10),bookDate,126) as convertBookDate from roomBook where bookDate between '2007-4-10' and '2007-4-25'";\x0d\\x0d\Systemoutprintln(rsgetString("convertBookDate")); \x0d\\x0d\2、利用SimpleDateFormat类:\x0d\\x0d\先要输入两个java包:\x0d\\x0d\import javautilDate; \x0d\import javatextSimpleDateFormat;\x0d\\x0d\然后:\x0d\\x0d\定义日期格式:SimpleDateFormat sdf = new SimpleDateFormat(yy-MM-dd);\x0d\\x0d\sql语句为:String sqlStr = "select bookDate from roomBook where bookDate between '2007-4-10' and '2007-4-25'";\x0d\\x0d\输出:\x0d\\x0d\Systemoutprintln(dfformat(rsgetDate("bookDate")));
以上就是关于3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容全部的内容,包括:3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容、java 根据日期获取当月所有日期,和 上个月所有日期、java 怎么获取上周所有日期本月和上月所有日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)