常用类(Date,Calendar,Math,枚举)
1.日期时间类
计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(以毫秒ms为单位)。
如:计算机时间2019-04-29 14:14:00是该时间距离历元经过的毫秒数
由于数值过大,用long类型存储,所以时间本质上是一个整型。
格林尼治时间(GMT),是一个标准时间,用于全球时间的标准化,也称世界协调时(UT)。各个国家通过时区偏移来定义各国的标准时间。
中国位于东八区
中国的标准时china standard time = UTC+08:00
2.Date
Date是一个类,表示特定的瞬间,精确到毫秒。
Date类本质上拥有一个long fastTime属性的包装类,提供了很多属性和方法用于快速获取年月日、时分秒。而fastTime就是时间戳。
public static void main(String[] args) {
// 创建一个Date对象,表示当前时间
// 根据当前时区、当前语言环境等创建当前时间
Date date1 = new Date();
System.out.println(date1);
// 获取date1的时间戳
long time1 = date1.getTime();
System.out.println(time1);
// 通过时间戳创建Date对象
longts1 = 0;
Date date2 = new Date(ts1);
System.out.println(date2);
// 需求:请构建一个时间,表示未来一天的当前时间。
longts2 = 24*3600*1000+date1.getTime();
Date date3 = new Date(ts2);
System.out.println(date3.toString());
}
1).时间比较
public static void main(String[] args) {
// 比较两个时间
Date d1 = newDate();
Date d2 = new Date(d1.getTime()+1000);
System.out.println(d1.before(d2));
System.out.println(d1.after(d2));
System.out.println(d1.compareTo(d2));
System.out.println(d1.equals(d2));
// d1.getTime() - d2.getTime()
// setTime:改变Date对象的时间戳
d1.setTime(d1.getTime()+24*3600*1000);
System.out.println(d1);
}
2).日期时间的格式化
[1]把Date对象格式化成特定的字符串
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
// 日期格式化->字符串
SimpleDateFormat df = new SimpleDateFormat();
// [1]使用默认的模式和语言环境
// 19-4-29 下午3:36
String dateStr = df.format(date);
System.out.println(dateStr);
// [2]使用指定模式格式化
// xxxx年xx月xx日 xx时xx分xx秒
SimpleDateFormatdf2 = newSimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String dateStr2 = df2.format(date);
System.out.println(dateStr2);
// 修改模式
// df2.applyPattern("yyyy-MM-dd");
df2.applyPattern("yyyy/MM/dd");
String dateStr3 = df2.format(date);
System.out.println(dateStr3);
}
[2]把特定的格式的字符串解析成Date对象
public static void main(String[] args) {
String str = "2019-04-29 15:48:00";
SimpleDateFormatdf = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 把子串->Date
try {
Date date = df.parse(str);
System.out.println(date);
} catch (ParseExceptione) {
e.printStackTrace();
}
}
3.Calendar
由于Date的很多方法在jdk1.1已经过时了,jdk推荐使用Calendar取代Date获取单独的年、月、日、时、分、秒,这个关键字功能更强大。
Calendar是日历类,本质上内部拥有一个属性long time。表示该日历所具体的时间戳,同时Calendar内部通过对time的运算计算出很多日历字段,把这些日历字段存在一个容器中,并提供set/get方法用于设置或者访问这些字段。
获取Calendar中的日历字符值,如下
// 通过工厂设计模式构建一个对象
Calendar cal = Calendar.getInstance();
System.out.println(cal.toString()); // 获取年
System.out.println(cal.get(Calendar.YEAR));
// 获取月,索引从0开始,0-表示1月
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); // 时
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
// 分
System.out.println(cal.get(Calendar.MINUTE));
// 秒
System.out.println(cal.get(Calendar.SECOND));
System.out.println(cal.get(Calendar.MILLISECOND)); // 获取星期一周的第一天是周日开始
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 本月的第一天和本月的最后一天
System.out.println(cal.getActualMinimum(Calendar.DAY_OF_MONTH));
System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
把日历设置成本月一号
Calendar nowcal=Calendar.getInstance();
nowcal.set(Calendar.DAY_OF_MONTH,1);
4.Math
Math 类包含用于执行基本数学运算的方法。例如,随机数、平方、立方。
public static void main(String[] args) {
// 常用属性
System.out.println(Math.PI);
// 常用方法
// 绝对值
System.out.println(Math.abs(-10));
// ceil/floor
// 返回比10.1大的最小整数=>向上取整
System.out.println(Math.ceil(10.1));
// 返回比10.1小的最大整数=>向下取整
System.out.println(Math.floor(10.1));
// max/min
System.out.println(Math.max(10, 20));
System.out.println(Math.min(10, 20));
// pow(x,y) x的y次方
System.out.println(Math.pow(2, 3));
// Math.random随机数
// 产生[m,n]随机整数<=> (int)(Math.random()*(n-m+1)) + m
// 四舍五入
System.out.println(Math.round(4.4));
// 把弧度转角度
System.out.println(Math.toDegrees(Math.PI/2));
// 把角度转化成弧度
System.out.println(Math.toRadians(180));
// (C)sin(a)/cos(a)/tan(a)
System.out.println(Math.sin(Math.toRadians(30)));
// 需求:求两点之间的距离(x1,y1)-(x2,y2)的距离。
// Math.sqrt(Math.pow((y1-y2), 2)+Math.pow((x1-x2),2))
}
5.枚举
1).枚举定义
枚举是由一组固定的常量组成的类型,自定义数据类型。语法如下:
[修饰符]enum enumName{
常量值1,
常量值2,
常量值3…
常量值n[;](这个分号可加可不加:如果后面跟一个方法是,必须加";")
}
注:枚举的常量值一定是可列举的有限值。常量值的类型都是public static final,直接用类名引用。
定义一个枚举:
public enum Gender {
男,
女,
保密;
}
Gender是一种自定义的数据类型,可以用于声明变量,且变量的取值必须是枚举值的其中一个。gender的值必须是男或者女或者保密。
public static void main(String[] args) {
// 声明一个Gender枚举类型的变量gender,并取值为男
Gender gender = Gender.男;
}
java中所有的枚举类型都继承于Enum类。可以把枚举类型看出一个类。
public class Student {
private String name;
privateintage;
private Gender gender;
public String getName() {
return name;
}
publicvoidsetName(String name) {
this.name = name;
}
publicintgetAge() {
retur nage;
}
public void setAge(intage) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public Student(String name, intage, Gender gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
public Student() {
super();
}
@Override
public String toString() {
return"Student [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
}
// class Gender extends Enum{}
enum Gender {
男, 女, 保密;
}
2).枚举和字符串转化
public static void main(String[] args) {
// 声明一个Gender枚举类型的变量gender,并取值为男
Gender gender = Gender.男;
// 枚举值->字符串
System.out.println(gender.toString());
// 字符串串->枚举值
String str = "保密";
// 可能产生IllegalArgumentException非法参数异常
Gender gender2 = Enum.valueOf(Gender.class, str);
System.out.println(gender2);
}
3).枚举和switch
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}
public static void main(String[] args) {
// 需求:有一个变量表示星期几,输出对于的教学安排
Week week = Week.TUESDAY;
switch (week) {
case MONDAY:
case TUESDAY:
case THURSDAY:
case FRIDAY:
case SATURDAY:{
System.out.println("上课");
break;
}
case WEDNESDAY:
case SUNDAY:{
System.out.println("练习");
break;
}
}
}
4)枚举的其他方法
public static void main(String[] args) {
// 枚举变量的其他方法
Week week = Week.SUNDAY;
System.out.println(week.name());
System.out.println(week.ordinal());
}
枚举总结:
【1】只能够取特定值中的一个
【2】使用enum关键字
【3】所有的枚举类型隐性地继承自java.lang.Enum。(枚举实质上还是类!而每个被枚举的成员 实质就 是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类 型名直接使用它 们。)
【4】强烈建议当你需要定义一组常量时,使用枚举类型(为了避免出现魔鬼数字)
思考:能不能根据序号得到对于的枚举值?
枚举类.class.getEnumConstants()[枚举索引]
常用类(Date,Calendar,Math,枚举)的更多相关文章
- 常用工具类(System,Runtime,Date,Calendar,Math)
一.System: 一个java.lang包中的静态工具类. 三大字段: static PrintStream err “标准”错误输出流. static InputStream in “标准”输入流 ...
- 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类
Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...
- Java常用类Date、Calendar、SimpleDateFormat详解
Date类 java.util 包提供了 Date 类来封装当前的日期和时间,Date 类提供两个构造函数来实例化 Date 对象 第一个构造函数使用当前日期和时间来初始化对象 Date( ) 第 ...
- Java基础——常用类(Date、File)以及包装类
本文要点: 基本数据类型的包装类 字符串相关类: 不可变字符序列:String 可变字符序列:StringBuffer.StringBuilder 时间处理相关类: Date DateFormat.S ...
- 【Java常用类】Calendar
Calendar日历类 实例化 方法一 创建其子类**(GregorianCalendar)**的对象 方法二 调用其静态方法getInstance() Calendar instance = Cal ...
- Java常用类Date相关知识
Date:类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值.它也允许格式化和解析日期字符串. Dat ...
- 黑马程序员——JAVA基础之System,Runtime,Date,Calendar,Math
------- android培训.java培训.期待与您交流! ---------- System: 类中的方法和属性都是静态的. out: 标准输出,默认是控制台. in:标准输入,默认是键盘 ...
- java常用类 比较器/system/math/big
Java 比较器 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable Comparable接口 ...
- Java常用类之【Math类、Random类、System类、Runtime类】
一.Math类 Math类 [绝对值]Math.abs();//返回对应类型的绝对值 [最大值和最小值]Math.max(int a, int b) ,Math.min(int a,int b);(其 ...
- java常用类————Date类
Date类在Java.util包中. 一.功能介绍:创建Date对象,获取时间,格式化输出的时间. 二.对象创建:1.使用Date类无参数的构造方法创建的对象可以获取本地时间.例如: Date now ...
随机推荐
- /proc文件系统(二):/proc/<pid>/stat
0. 前言 /proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间. 它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某 ...
- C#基础知识汇总(不断更新中)
------------------------------目录---------------------------- 1.隐式类型2.匿名类型3.自动属性4.初始化器5.委托6.泛型7.泛型委托8 ...
- 浏览器与Tomcat交互
浏览器与Tomcat交互 Web开发者都知道在Tomcat下部署应用后启动Tomcat即可通过浏览器与Tomcat建立连接. 那么二者之间的连接建立过程是怎么样的呢?(在此,我们不具体讲述关于网络底层 ...
- JS 判断是否是手机端并跳转操作
JS 判断运行当前脚本的应用程序是否为手机端或者一些其他信息,在我的工作中遇到的不是十分频繁,被我的同事一问就给问住了,所以把之前找到的一些知识点整理出来,供大家参考,若哪里不对欢迎指出,我会及时的更 ...
- 安装Vue和创建一个Vue脚手架项目
首先 安装node.js,安装成功可以在控制台输入[node --version ]查看node的版本,因为安装了node会自带npm所以我们可以用 [npm --version]查到npm版本 如 ...
- cf666E. Forensic Examination(广义后缀自动机 线段树合并)
题意 题目链接 Sol 神仙题Orz 后缀自动机 + 线段树合并 首先对所有的\(t_i\)建个广义后缀自动机,这样可以得到所有子串信息. 考虑把询问离线,然后把\(S\)拿到自动机上跑,同时维护一下 ...
- 可视化接口管理工具RAP,模拟数据,校验接口
最近看到一个不错的接口管理的工具,分享一下 RAP ppt介绍:http://www.imooc.com/video/11060 RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校 ...
- kvm 安装操作系统问题
1.出现error processing drive: 解决: --ram 设置到1024 2.分区的时候磁盘文件大小为0 解决:创建虚拟机的时候添加参数ormat=qcow2,size=7,bus= ...
- MySQL主从复制--原理
简介 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一 ...
- Angular基础(八) Observable & RxJS
对于一个应用来说,获取数据的方法可以有很多,比如:Ajax, Websockets, LocalStorage, Indexdb, Service Workers,但是如何整合多种数据源.如何避免BU ...