JAVA 获得特定格式时间
访客 发布于2023-10-02 办公教程 77
0 背景
我们有时要获取时间,年月日时分秒周几,有时要以特定的格式出现。这时就要借助 SimpleDateFormat 或者 DateTimeFormatter。有时要某个月份有多少天需要借助 Calendar。所以有必要了解一些知识。
1 SimpleDateFormat
simpledateFormat 线程不安全,DateTimeFormatter 线程安全。
// 用法
String string = new SimpleDateFormat(String PATTERN, Locale locale).format(Date date);
PATTERN 的样式有很多。具体可以看源码。
public static final String STAND_TIME = "yyyy-MM-dd HH:mm:ss";
public static final String FULL_TIME = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";
public static final String YEAR_MONTH_DAY_CN = "yyyy年MM月dd日";
public static final String HOUR_MINUTE_SECOND = "HH:mm:ss";
public static final String HOUR_MINUTE_SECOND_CN = "HH时mm分ss秒";
public static final String YEAR = "yyyy";
public static final String MONTH = "MM";
public static final String DAY = "dd";
public static final String WEEK = "E";
public static final String HOUR = "HH";
public static final String MINUTE = "mm";
public static final String SECOND = "ss";
public static final String MILLISECOND = "SSS";
2 Calendar
Calendar calendar = Calendar.getInstance();
// 设置一个日历
calendar.set(Calendar.DATE,int);
calendar.set(Calendar.MONTH,int);
calendar.set(Calendar.YEAR,int);
// 年月日的增加,可正可负
calendar.add(Calendar.DATE,int);
calendar.add(Calendar.MONTH,int);
calendar.add(Calendar.YEAR,int);
// 年月日的回滚,不会影响大字段。如增加日,不会影响月,31 -> 1,不改变月份。
calendar.roll(Calendar.DATE,int);
calendar.roll(Calendar.MONTH,int);
calendar.roll(Calendar.YEAR,int);
另外注意的参数
// week 是从星期天开始算的 1 - > 7
int a = calandar.get(Calendar.DAY_OF_WEEK);
// month 是从 0 开始的, 0 -> 11
int month = calendar.get(Calendar.MONTH);
3 时间工具 DateUtil
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Objects;
public class DateUtil {
public static final String STAND_TIME = "yyyy-MM-dd HH:mm:ss";
public static final String FULL_TIME = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";
public static final String YEAR_MONTH_DAY_CN = "yyyy年MM月dd日";
public static final String HOUR_MINUTE_SECOND = "HH:mm:ss";
public static final String HOUR_MINUTE_SECOND_CN = "HH时mm分ss秒";
public static final String YEAR = "yyyy";
public static final String MONTH = "MM";
public static final String DAY = "dd";
public static final String WEEK = "E";
public static final String HOUR = "HH";
public static final String MINUTE = "mm";
public static final String SECOND = "ss";
public static final String MILLISECOND = "SSS";
public static final String YESTERDAY = "昨天";
public static final String TODAY = "今天";
public static final String TOMORROW = "明天";
/**
* 获得当前时间
*
* @return 例如 2023-09-29 10:00:00
*/
public static String getCurrentDateTime() {
return new SimpleDateFormat(STAND_TIME, Locale.CHINESE).format(new Date());
}
/**
* 获得当前完整时间
*
* @return 例如 2023-09-29 10:00:00.123
*/
public static String getCurrentFullDateTime() {
return new SimpleDateFormat(FULL_TIME, Locale.CHINESE).format(new Date());
}
/**
* 获得今天年月日
*
* @return 例如 2023-09-29
*/
public static String getCurrentYearMonthDay() {
return new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE).format(new Date());
}
/**
* 获得年月日 中文版
*
* @return 例如 2023年9月29日
*/
public static String getCurrentYearMonthDayCn() {
return new SimpleDateFormat(YEAR_MONTH_DAY_CN, Locale.CHINESE).format(new Date());
}
/**
* 获得年月日 自定义分隔符
*
* @param delimiter 分隔符
* @return 例如 2023/9/29
*/
public static String getCurrentYearMonthDayDelimiter(CharSequence delimiter) {
return new SimpleDateFormat(YEAR + delimiter + MONTH + delimiter + DAY, Locale.CHINESE).format(new Date());
}
/**
* 获得时分秒
*
* @return 例如 10:00:00
*/
public static String getCurrentHourMinuteSecond() {
return new SimpleDateFormat(HOUR_MINUTE_SECOND, Locale.CHINESE).format(new Date());
}
/**
* 获得时分秒 中文版
*
* @return 例如 10时00分00秒
*/
public static String getCurrentHourMinuteSecondCn() {
return new SimpleDateFormat(HOUR_MINUTE_SECOND_CN, Locale.CHINESE).format(new Date());
}
/**
* 获取时分秒 分隔符
*
* @param delimiter 分隔符
* @return 例如 2021/07/01
*/
public static String getCurrentHourMinuteSecondDelimiter(CharSequence delimiter) {
return new SimpleDateFormat(HOUR + delimiter + MINUTE + delimiter + SECOND, Locale.CHINESE).format(new Date());
}
/**
* 获得年
*
* @return 例如 2023
*/
public static String getCurrentYear() {
return new SimpleDateFormat(YEAR, Locale.CHINESE).format(new Date());
}
/**
* 获得月
*
* @return 例如 09
*/
public static String getCurrentMonth() {
return new SimpleDateFormat(MONTH, Locale.CHINESE).format(new Date());
}
/**
* 获得日
*
* @return 29
*/
public static String getCurrentDay() {
return new SimpleDateFormat(DAY, Locale.CHINESE).format(new Date());
}
/**
* 获得时
*
* @return 例如 10
*/
public static String getCurrentHour() {
return new SimpleDateFormat(HOUR, Locale.CHINESE).format(new Date());
}
/**
* 获得时分秒
*
* @return 例如 00
*/
public static String getCurrentMinute() {
return new SimpleDateFormat(MINUTE, Locale.CHINESE).format(new Date());
}
/**
* 获得秒
*
* @return 例如 00
*/
public static String getCurrentSecond() {
return new SimpleDateFormat(SECOND, Locale.CHINESE).format(new Date());
}
/**
* 获得毫秒
*
* @return 例如 123
*/
public static String getCurrentMillisecond() {
return new SimpleDateFormat(MILLISECOND, Locale.CHINESE).format(new Date());
}
/**
* 获得当前时间戳
*
* @return 例如 2023-9-29 10:00:00 为1695952800
*/
public static long getCurrentTimestamp() {
return System.currentTimeMillis();
}
/**
* 将时间转换成时间戳
*
* @param time 时间
* @return 返回时间戳 long
*/
public static long dateToStamp(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(STAND_TIME, Locale.CHINESE);
Date date = null;
try {
date = simpleDateFormat.parse(time);
} catch (Exception e) {
e.printStackTrace();
}
return Objects.requireNonNull(date).getTime();
}
/**
* 将时间戳转换成时间
*
* @param stamp 时间戳
* @return 例如 2023-9-29 10:00:00
*/
public static String stampToDate(long stamp) {
return new SimpleDateFormat(STAND_TIME, Locale.CHINESE).format(stamp);
}
/**
* 返回今天是星期几
*
* @return 例如 周五
*/
public static String getCurrentWeek() {
return new SimpleDateFormat(WEEK, Locale.CHINESE).format(new Date());
}
/**
* @param dateTime 日期 例如 2023-09-29
* @return 例如 周五
*/
public static String getWeekOf(String dateTime) {
Date date;
if ("".equals(dateTime)) {
date = new Date();
} else {
SimpleDateFormat sdf = new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE);
try {
date = sdf.parse(dateTime);
} catch (Exception e) {
date = new Date();
e.printStackTrace();
}
}
return new SimpleDateFormat(WEEK,Locale.CHINESE).format(date);
}
/**
* @param dateTime 日期 例如 2023-09-29
* @return 例如 2023-09-28
*/
public static String getYesterdayOf(String dateTime) {
SimpleDateFormat sdf = new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE);
Date date;
try {
date = sdf.parse(dateTime);
} catch (ParseException e) {
date = null;
e.printStackTrace();
}
Calendar calendar = new GregorianCalendar();
if (date != null) {
calendar.setTime(date);
}
calendar.add(Calendar.DATE, -1);
date = calendar.getTime();
return new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE).format(date);
}
/**
* 获取输入日期的明天
*
* @param dateTime 例如 2023-09-29
* @return 例如 2023-09-30
*/
public static String getTomorrowOf(String dateTime) {
SimpleDateFormat sdf = new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE);
Date date;
try {
date = sdf.parse(dateTime);
} catch (ParseException e) {
date = null;
e.printStackTrace();
}
Calendar calendar = new GregorianCalendar();
if (date != null) {
calendar.setTime(date);
}
calendar.add(Calendar.DATE, +1);
date = calendar.getTime();
return new SimpleDateFormat(YEAR_MONTH_DAY, Locale.CHINESE).format(date);
}
/**
* @param dateTime 一个时间 例如 2023-9-29
* @return 相对今天而言是什么,比如今天是2023-9-30,返回昨天。
*/
public static String getDayInfoOf(String dateTime) {
String dayInfo;
String toDay = getCurrentYearMonthDay();
String yesterday = getYesterdayOf(toDay);
String tomorrow = getTomorrowOf(toDay);
if (dateTime.equals(yesterday)) {
dayInfo = YESTERDAY;
} else if (dateTime.equals(toDay)) {
dayInfo = TODAY;
} else if (dateTime.equals(tomorrow)) {
dayInfo = TOMORROW;
} else {
dayInfo = getWeekOf(dateTime);
}
return dayInfo;
}
/**
* 返回当前月份的天数
*
* @return 例如 9月份 返回30
*/
public static int getCurrentDaysOfMonth() {
Calendar calendar = new GregorianCalendar();
//把日期设置为当月第一天
calendar.set(Calendar.DATE, 1);
//日期回滚一天,也就是最后一天,roll 方法不更改大字段。
calendar.roll(Calendar.DATE, -1);
return calendar.get(Calendar.DATE);
}
/**
* 返回指定年份月份的天数
*
* @param year 年份 例如 2023
* @param month 月份 例如 09
* @return 例如 30
*/
public static int getDaysOfMothOf(int year, int month) {
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
//把日期设置为当月第一天
calendar.set(Calendar.DATE, 1);
//日期回滚一天,也就是最后一天,roll 方法不更改大字段。
calendar.roll(Calendar.DATE, -1);
return calendar.get(Calendar.DATE);
}
}
更多 推荐PPT模板
-
一份简洁大气的商务风格工作总结汇报PPT模板,浅灰色背景,蓝色主色调,包括过渡页、时间轴、折线图、地图等页面。
2023-06-14 763
-
灰格子背景 简洁蓝商务PowerPoint幻灯片模板
2023-06-15 750
-
不忘初心 牢记使命——蓝金党政风工作汇报ppt模板
2023-06-15 741
-
彩虹多彩王国ppt模板
2023-06-15 737
相关推荐
- 10-06 K8sGPT,基于 AI 的云原生终极工具
- 10-06 【Java】复制数组的四种方式
- 10-06 Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem
- 10-06 一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
- 10-06 美丽的图论
- 10-06 Pygame实现黑客帝国屏幕效果
- 10-06 后台管理系统: 商品管理
- 10-06 chrome插件-入门
- 10-06 【C++入门到精通】C++入门 —— set & multiset (STL)
- 10-02 【数据结构】什么是数据结构?
- 最近发表
-
- 一份有创意的大学生求职个人简历PPT模板,时尚全图背景配合大号字体,共32页,内容非常详尽,好看的动态效果。使用字体:汉仪菱心体简。
- 一份精美时尚的商务风格多功能幻灯片模板,以城市楼群远景图片为背景,全图型设计,时尚大气,共18页,目录页、过渡页、时间轴、图文说明等各类页面齐全丰富,可用于商务
- 小清新复古色系通用PPT模板。一份小清新风格的幻灯片模板,采用养眼柔和的复古色系艺术抽象条纹设计,通用性强。
- 实用精品商业计划书PPT模板。一份精美实用的商业计划策划书PPT模板,框架完整,内容实用,严谨专业,页面丰富。
- 炫酷欧美复古杂志风PPT模板。一份创意精美幻灯片模板,采用复古色系配合杂点做旧效果,很有质感,杂志风格的排版布局,无缝滚动切换效果,适合用于新年展望、员工激励等
- 一份实用的项目合作方案汇报PPT模板,排版布局配色简洁大气专业,包括项目介绍、需求分析、项目设计、各方需要配合的工作、项目预算几个部分。
- 好看的半透明效果PPT模板。一份很好看的幻灯片模板,采用时尚的半透明效果设计,大气山峰雪山背景,动态演示。
- 一份精美的简约的半透明IOS苹果风格PPT模板,渐变模糊光晕背景,半透明图形元素,好看的动态播放效果,用途广泛。
- 黑黄配色时尚欧美风PPT模板。一份精美好看的幻灯片模板,黑黄大气经典配色,时尚欧美范,共19页,页面丰富实用。
- 杂志风项目策划汇报PPT模板。经典红黑配色,干净利落的大气商务风格,动态演示,适合项目策划报告汇报使用。
- 标签列表
- 控制面板
- 搜索