@Test
public void test() {
String birthday = "2022-03-23T16:00:00.000Z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
//字符串转date
Date time = simpleDateFormat.parse(birthday);
System.out.println(time);
//date转字符串
System.out.println(simpleDateFormat.format(time));
System.out.println(time.toLocaleString().split(" ")[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
Vue 框架使用时间插件:
案例一:
<template>
<el-date-picker
type="month"
v-model="yearMonth"
format="yyyy-MM"
value-format="yyyy-MM"
:picker-options="pickerOptions"
>
</template>
<script>
export default {
data () {
return {
pickerOptions: {
// 限制时分秒
selectableRange: ['12:00:00 - 23:59:59'],
// 限制年月日
disabledDate:(time)=>{ // time为el-date-picker选择器的时间
const date = new Date() // 获取当前时间
const year = date.getFullYear() // 转化当前年度
let month = date.getMonth() + 1 // 转化当前月份 需+1
if (month >= 1 && month <= 9) { // 为1-9月前加上0 比如: 03
month = '0' + month
}
const currentDate = year.toString() + month.toString() // 将年份和月份拼接 202110
const timeYear = time.getFullYear() // 将el-date-picker选择器转化为年份
let timeMonth = time.getMonth() + 1 // 将el-date-picker选择器时间转化为月份
if (timeMonth >= 1 && timeMonth <= 9) { // 为1-9月前加上0 比如: 03
timeMonth = '0' + timeMonth
}
const timeDate = timeYear.toString() + timeMonth.toString() // 将年份和月份拼接 会自动进行循环 自动拼接el-date-picker选择器的时间 例:202101
/**
* 可以取区间值
* 也可以某年某月之前或者之后
* timeDate 选择器时间
* currentDate 当前年月份 202110
*/
return currentDate < timeDate || currentDate > timeDate // 将2021年10之前和2021年10月之后禁用 只可选取2021年10月
}
},
}
}
}
</script>
案例二:
1.实现只选择年份
此时如果年份为2022
那么实际传到后端的时间是2021年的最后一天,显然是不对的,那么有什么办法得到正确的时间呢?答案是elementUI自带的日期转换format
<el-form-item label="查询年份:" label-width="82px">
<el-date-picker
style="width: 140px"
v-model="formResult.year"
type="year"
placeholder="">
</el-date-picker>
</el-form-item>
2.添加日期格式化
<el-form-item label="查询年份:" label-width="82px">
<el-date-picker
style="width: 140px"
v-model="formResult.year"
type="year"
format="yyyy"(显示格式化)
value-format="yyyy"(数据格式化)
placeholder="">
</el-date-picker>
</el-form-item>
当然,要获得完整的时间直接用yyyy-MM-dd
问题一:
SimpleDateFormat的parse()得到的日期不是正确日期?
一定要注意是否是定义的日期格式错误,特别注意大小写!!!
年 :y
月:M
日:d
时:H
分:m
秒:s
大小写写错会导致得到的日期不正确。
问题二:
能否直接从数据库查出date类型的时间(默认是sql类型的date)?
// sql转date 使用SQL自带函数
date_format(date, format) 函数,MySQL日期格式化函数date_format()
执行sql查询当前日期:
select now();
时间转字符串
select date_format(now(), '%Y-%m-%d');
通过生日计算年龄,以及根据数字返回男还是女
sql写法:
左连接查询经典案例。
<select id="findAllVip" resultType="java.util.HashMap">
SELECT
a.id,
a.fileNumber,
a.NAME name,
YEAR (
NOW())- LEFT ( a.birthday, 4 ) age,
CASE
( a.sex )
WHEN 1 THEN
'男'
WHEN 2 THEN
'女'
END
AS 'sex',
b.username health,
a.phoneNumber,
a.regTime
FROM
t_member a
LEFT JOIN t_user b ON a.user_id = b.id
<where>
<if test="value!=null and value.length>0">
a.fileNumber = #{value} or a.name = #{value} or a.phoneNumber = #{value}
</if>
</where>
</select>
方式二:
在实现类里面操作
for (Member member : memberList){
if (member.getBirthday() != null) {
int age = DateUtils.GetAge(member.getBirthday());
member.setAge(age);
}
}
public static int GetAge (Date date){
Calendar calendar = Calendar.getInstance();
Date nowTime = calendar.getTime();
long difference = (nowTime.getTime()-date.getTime())/86400000;
int year = Math.toIntExact(difference / 365);
if (difference%365 != 0){
year +=1;
}
return year;
}
下文附上日期操作时间类,方便日后使用:
/**
* 日期操作工具类
*/
public class DateUtils {
/**
* 日期转换- String -> Date
*
* @param dateString 字符串时间
* @return Date类型信息
* @throws Exception 抛出异常
*/
public static Date parseString2Date(String dateString) throws Exception {
if (dateString == null) {
return null;
}
return parseString2Date(dateString, "yyyy-MM-dd");
}
/**
* 日期转换- String -> Date
*
* @param dateString 字符串时间
* @param pattern 格式模板
* @return Date类型信息
* @throws Exception 抛出异常
*/
public static Date parseString2Date(String dateString, String pattern) throws Exception {
if (dateString == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(dateString);
return date;
}
/**
* 日期转换 Date -> String
*
* @param date Date类型信息
* @return 字符串时间
* @throws Exception 抛出异常
*/
public static String parseDate2String(Date date) throws Exception {
if (date == null) {
return null;
}
return parseDate2String(date, "yyyy-MM-dd");
}
/**
* 日期转换 Date -> String
*
* @param date Date类型信息
* @param pattern 格式模板
* @return 字符串时间
* @throws Exception 抛出异常
*/
public static String parseDate2String(Date date, String pattern) throws Exception {
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String strDate = sdf.format(date);
return strDate;
}
/**
* 获取当前日期的本周一是几号
*
* @return 本周一的日期
*/
public static Date getThisWeekMonday() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}
/**
* 获取当前日期周的最后一天
*
* @return 当前日期周的最后一天
*/
public static Date getSundayOfThisWeek() {
Calendar c = Calendar.getInstance();
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
if (dayOfWeek == 0) {
dayOfWeek = 7;
}
c.add(Calendar.DATE, -dayOfWeek + 7);
return c.getTime();
}
/**
* 根据日期区间获取月份列表
*
* @param minDate 开始时间
* @param maxDate 结束时间
* @return 月份列表
* @throws Exception
*/
public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {
ArrayList<String> result = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
SimpleDateFormat sdf2 = new SimpleDateFormat(format);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf2.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
return result;
}
/**
* 根据日期获取年度中的周索引
*
* @param date 日期
* @return 周索引
* @throws Exception
*/
public static Integer getWeekOfYear(String date) throws Exception {
Date useDate = parseString2Date(date);
Calendar cal = Calendar.getInstance();
cal.setTime(useDate);
return cal.get(Calendar.WEEK_OF_YEAR);
}
/**
* 根据年份获取年中周列表
*
* @param year 年分
* @return 周列表
* @throws Exception
*/
public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {
Date useDate = parseString2Date(year, "yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(useDate);
//获取年中周数量
int weeksCount = cal.getWeeksInWeekYear();
Map<Integer, String> mapWeeks = new HashMap<>(55);
for (int i = 0; i < weeksCount; i++) {
cal.get(Calendar.DAY_OF_YEAR);
mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));
}
return mapWeeks;
}
/**
* 获取某年的第几周的开始日期
*
* @param year 年分
* @param week 周索引
* @return 开始日期
* @throws Exception
*/
public static Date getFirstDayOfWeek(int year, int week) throws Exception {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getFirstDayOfWeek(cal.getTime());
}
/**
* 获取某年的第几周的结束日期
*
* @param year 年份
* @param week 周索引
* @return 结束日期
* @throws Exception
*/
public static Date getLastDayOfWeek(int year, int week) throws Exception {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getLastDayOfWeek(cal.getTime());
}
/**
* 获取当前时间所在周的开始日期
*
* @param date 当前时间
* @return 开始时间
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.SUNDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
return c.getTime();
}
/**
* 获取当前时间所在周的结束日期
*
* @param date 当前时间
* @return 结束日期
*/
public static Date getLastDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.SUNDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
return c.getTime();
}
//获得上周一的日期
public static Date geLastWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, -7);
return cal.getTime();
}
//获得本周一的日期
public static Date getThisWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}
//获得下周一的日期
public static Date getNextWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, 7);
return cal.getTime();
}
//获得今天日期
public static Date getToday(){
return new Date();
}
//获得本月一日的日期
public static Date getFirstDay4ThisMonth(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,1);
return calendar.getTime();
}
public static void main(String[] args) {
try {
System.out.println("本周一" + parseDate2String(getThisWeekMonday()));
System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getDayOfMonth(){
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
int day=aCalendar.getActualMaximum(Calendar.DATE);
return day;
}
public static Date getLastDayThisMonth(int year,int month){
int y,m;
if(month == 12){
y = year++;
m = 1;
}else{
y = year;
m = month++;
}
Calendar calendar = Calendar.getInstance();
calendar.set(y,m,1);
calendar.add(Calendar.DAY_OF_MONTH,-1);
return calendar.getTime();
}
/*public static Date getLastDayOfMounth(Date date){
date.
Calendar
}*/
public static int GetAge (Date date){
Calendar calendar = Calendar.getInstance();
Date nowTime = calendar.getTime();
long difference = (nowTime.getTime()-date.getTime())/86400000;
int year = Math.toIntExact(difference / 365);
if (difference%365 != 0){
year +=1;
}
return year;
}
}