
SimpleDateFormat inSdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", LocaleUS);
创建SimpleDateFormat对象的时候使用带Locale的构造参数
因为你的星期和月份是用E文写的 所以parse回来的时候自然得用E文的Locale 用默认中文的Locale就会认不出来
btw 你用US的Locale的话 时区也会跑那里去 所以你应该给时区指定GMT+08:00 而不是光一个GMT
参考这段小代码
String s ="Thu, 02 Mar 2006 05:14:25 GMT+08:00";
SimpleDateFormat inSdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", LocaleUS);
SimpleDateFormat outSdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", LocaleCHINA);
try {
Date dateS = inSdfparse(s);
Systemoutprintln(outSdfformat(dateS));
} catch (ParseException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
//1、定义转换格式
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyyMMdd");
//2、调用formatter2parse(),将"19570323"转化为date类型 输出为:Sat Mar 23 00:00:00 GMT+08:00 1957
Date date = formatter2parse(dateString);
//3、将date类型 (Sat Mar 23 00:00:00 GMT+08:00 1957)转化为String类型
//注意现在用的是formatter来做转换,输出为String类型的:"1957-03-23"
String dString = formatterformat(date);
//4、将String转化为date,需要注意javasqlDatevalueOf()函数只能接受参数类型为yyyy-MM-dd类型的
Date data = javasqlDatevalueOf(dString);
//5、将获取的date类型的出生日期赋值给javabean
personAuditsetBirthDate((empgetHealthCarePrincipalPerson() != null
&& empgetHealthCarePrincipalPerson()getBirthTime() != null)data:null)。
知其然,知其所以然
此博文的依据: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个月,如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环
字段updateTime为Date类型,那么如果只要精确到年月日,那么就使用trunc(updateTime)即可,其他还有:
trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
select sysdate S1,
trunc(sysdate) S2, //返回当前日期,无时分秒
trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒
trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒
trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒
可用month函数获取月份。
测试方法:
1、创建一个含有date类型的表,并在表中插入数据(数据日期为当前时间):
create table test(id int,
begin_date date)
insert into test values (1,getdate())
2、执行语句,获取月份:
select MONTH(begin_date) from test3、执行结果:
select to_char(日期,'yyyy-mm-dd') from 表名
to_char就是个转换函数,将date型转成字符型,后边'yyyy-mm-dd' 就是你要转成的格式
当然,也可以to_char(日期,'yyyy') 直接返回年,月和日也同理
Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。
1Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
2Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
3Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
扩展资料
切记不要用字符串存储日期
这种存储日期的方式的优点还是有的,就是简单直白,容易上手。但是,这是不正确的做法,主要会有下面两个问题:
1、字符串占用的空间更大。
2、字符串存储的日期比较效率比较低(逐个字符进行比对),无法用日期相关的 API 进行计算和比较。
DateTime 类型没有时区信息的
DateTime 类型是没有时区信息的(时区无关) ,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。
当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。不要小看这个问题,很多系统就是因为这个问题闹出了很多笑话。
Timestamp 和时区有关。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。
实现思路就是先将timestamp转换为字符串,之后字符串转换为日期类型。举例:long
l
=
systemcurrenttimemillis();//获取当前的timestamp值
simpledateformat
format
=
new
simpledateformat("yyyy-mm-dd");//定义日期类型格式
string
str2
=
timestampvalueof(formatformat(l));//转换为字符串
//systemoutprintln(str2);//打印获取的字符串
date
date
=
format
parse(str2);//格式化获取到的日期,
systemoutprintln(date);
输出结果:2015-06-27。
以上就是关于java中的Date怎么转换成YYYYMMDD形式全部的内容,包括:java中的Date怎么转换成YYYYMMDD形式、3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容、java 怎样获取java.sql.date 类型年月日并插入到数据库date类型中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)