网站首页 > 技术文章 正文
1 java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒GMT之间以毫秒为单位的时间差。此方法适于计算时间差。
2 java.util.Date
它的对象表示一个特定的瞬间,精确到毫秒。
Java中时间的表示说白了也是数字,是从标准纪元1970年1月1日0时0分0秒GMT到某个时刻的毫秒数,类型是long
理解:一维的时间轴,选择1970年1月1日0时0分0秒时间为0刻度,1毫秒一刻度
构造方法:
l Date(): 源代码:this(System.currentTimeMillis());
l Date(long date)
常用方法:
l getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
l toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:
dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat), zzz是时间标准。
已过时的方法:
l public Date(int year,int month,int date,int hrs,int min,int sec)
参数:
year - 见 1900 的年份。
month - 0-11 之间的月份。
date - 一月中 1-31 之间的某一天。
hrs - 0-23 之间的小时数。
min - 0-59 之间的分钟数。
sec - 0-59 之间的秒数。
l getYear() 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
l getMonth()从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。返回的值在 0 和 11 之间,值 0 表示 1 月。
l getDate() JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。返回的值在 1 和 31 之间
l getDay()从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。 返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 表示一周中的某一天
l getHours()从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。返回值是一个数字(0 至 23)
l getMinutes()从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 返回值在 0 和 59 之间。
l getSeconds()从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。回的值在 0 和 61 之间。值 60 和 61 只可能发生在考虑了闰秒的 Java 虚拟机上。
3 java.util.TimeZone和Locale
Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值,日期就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。
获取Locale对象:
Locale(String language)
Locale(String language, String country)
Locale.CHINA、Locale.US等
public static void main(String[] args) {
Locale loc = Locale.CHINA;
System.out.println(loc);//zh_CN
System.out.println(Locale.US);//en_US
System.out.println(Locale.JAPAN);//ja_JP
Locale c = new Locale("zh","CN");
System.out.println(c);
}
通常,使用 TimeZone的getDefault 获取 TimeZone,getDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。
也可以用TimeZone的 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
public static void main(String[] args) {
TimeZone t = TimeZone.getDefault();
System.out.println(t);
TimeZone t1 = TimeZone.getTimeZone("America/New_York");
System.out.println(t1);
TimeZone t2 = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(t2);
}
String[] all = TimeZone.getAvailableIDs();
for (String id : all) {
System.out.println(id);
}
4 java.util.Calendar
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁。而且Calendar提供了很多关于日期时间计算的方法。
GregorianCalendar(公历)是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
注意:
月份:一月是0,二月是1,以此类推,12月是11
星期:周日是1,周二是2,。。。。周六是7
//默认语言环境的时间(时区)
Calendar c = new GregorianCalendar();
/*
* java.util.GregorianCalendar[
* time=1480667849712,
* areFieldsSet=true,
* areAllFieldsSet=true,
* lenient=true,
* zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],
* firstDayOfWeek=1,
* minimalDaysInFirstWeek=1,
* ERA=1,
* YEAR=2016,
* MONTH=11,
* WEEK_OF_YEAR=49,//本年第49周
* WEEK_OF_MONTH=1,//本月第1周
* DAY_OF_MONTH=2,
* DAY_OF_YEAR=337,//本年第337天
* DAY_OF_WEEK=6,
* DAY_OF_WEEK_IN_MONTH=1,
* AM_PM=1, //下午
* HOUR=4,
* HOUR_OF_DAY=16, //HOUR是12小时制, HOUR_OF_DAY是24小时制
* MINUTE=37,
* SECOND=29,
* MILLISECOND=712,
* ZONE_OFFSET=28800000,
* DST_OFFSET=0]
*/
public static void main(String[] args) {
//默认语言环境的时间(时区)
Calendar c = new GregorianCalendar();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
int date=c.get(Calendar.DAY_OF_MONTH);
int hour=c.get(Calendar.HOUR_OF_DAY);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.SECOND);
int mill=c.get(Calendar.MILLISECOND);
int week=c.get(Calendar.DAY_OF_WEEK);
StringBuffer dateStr=new StringBuffer();
dateStr.append(year).append("年");
dateStr.append(month+1).append("月");
dateStr.append(date).append("日").append(" ");
dateStr.append(hour).append("时");
dateStr.append(minute).append("分");
dateStr.append(second).append("秒");
dateStr.append(mill).append("毫秒").append(" ");
String[] weeks={"日","一","二","","四","五","六"};
dateStr.append("星期").append(weeks[week-1]);
System.out.println(dateStr);
}
public static void main(String[] args) {
Calendar c = new GregorianCalendar(2015, 6, 13);
// c.set(2016, Calendar.DECEMBER, 4, 12, 12, 0);
// c.setTime(new Date());
//15天之后
//c.add(Calendar.DATE, 15);
//2个月之前
//c.add(Calendar.DAY_OF_MONTH, -2);
//12小时之后
c.add(Calendar.HOUR, 12);
Date time = c.getTime();//转成日期
System.out.println(time);
}
public static Calendar getInstance()使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。
public static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定的时区和给定的语言环境。
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);
System.out.println(c2);
Calendar c3 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);
System.out.println(c3);
}
5 java.text.DateFormat和SimpleDateFormat
完成字符串和时间对象的转化:
l String format(date)
l Date parse(string)
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 是本年的第几D");
System.out.println(sf.format(date));
String s = "2016-12-01 14:12:23";
SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = sf2.parse(s);
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
}
往期精彩内容:
猜你喜欢
- 2024-09-21 Java并发编程:LongAdder | LongAccumulator 对比测试
- 2024-09-21 「Java技巧」优雅的统计程序的执行时间,别再用System.cur
- 2024-09-21 Flink SQL 知其所以然(九)| SQL 的时间语义
- 2024-09-21 ArrayList插入1000w条数据之后,我怀疑了jvm...
- 2024-09-21 《Java实战之内存模型》详解篇(java内存模型happens before)
- 2024-09-21 比反射更快!使用ASM获取class信息(ClassReader)
- 2024-09-21 了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑
- 2024-09-21 让大学生写的一个计算时间的方法,有人看得出来是在做什么吗?这
- 2024-09-21 Java基础——Java多线程(Lock接口详解)
- 2024-09-21 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 569℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 510℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 467℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 444℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)