日期时间、Math、枚举
日期时间
计算机如何表示时间?
GMT时间指格林尼治所在地的标准时间,也称为时间协调时(UTC),其他地区的时间都是相对于GMT时间的偏移。
 
北京位于东八区 = UTC + 8
 
时间戳(timestamp):距离特定时间经过的毫秒数,这个特定的时间计算机规定了是1970年01月01日 00:00:00:000,这个特定时间成为历元。
 
计算机时间2018.12.22 11:41:23:000 就是2018.12.22 11:41:23:000距离历元经历的毫秒数,用long类型存储。
 
Date
java中表示日期时间的类,位于java.util包中。
 
public static void main(String[] args) {
// 根据当前系统当前时区构造一个Date对象表示当前时间。
Date date = new Date();
// Tue Apr 02 14:25:06 CST(China Standard Time) 2019
System.out.println(date);
 
 
Date date2 = new Date(1000);
// Thu Jan 01 08:00:00 CST 1970
System.out.println(date2);
 
 
// 需求:创建一个时间表示1天之后的现在
long ts1 = 24 * 60 * 60 * 1000;
Date now = new Date();
long ts2 = now.getTime() + ts1;
Date date3 = new Date(ts2);
System.out.println(date3);
}
Date 本质上是一个包装类,内部封装了一个long 类型的timestamp,表示距离历元所经历 的毫秒数。可以通过getTime() 其内部存储的时间戳。
 
时间的比较
public static void main(String[] args) {
 
Date date1 = new Date();
 
long ts1 = 24 * 60 * 60 * 1000;
Date date2 = new Date(date1.getTime() + ts1);
 
// before/after
System.out.println(date1.before(date2));
System.out.println(date1.after(date2));
 
// Comparable接口
System.out.println(date1.compareTo(date2));
 
// equals
System.out.println(date1.equals(date2));
}
 
日期时间格式化
[1] Date -> 字符串
public static void main(String[] args) {
 
Date now = new Date();
// System.out.println(now.toString());
 
// 格式化成友好的时间
// 按照默认的模式和默认的语言环境创建格式化对象
SimpleDateFormat df = new SimpleDateFormat();
// 19-4-2 下午2:51
String nowStr = df.format(now);
System.out.println(nowStr);
 
// 需求:按照 年-月-日 时:分:秒 格式格式化时间
/*
SimpleDateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String nowStr2 = df2.format(now);
System.out.println(nowStr2);
*/
 
// applyPattern
SimpleDateFormat df3 = new SimpleDateFormat();
df3.applyPattern("yyyy年MM月dd日");
String nowStr3 = df3.format(now);
System.out.println(nowStr3);
 
df3.applyPattern("HH:mm:ss");
String nowStr4 = df3.format(now);
System.out.println(nowStr4);
}
 
[2] 字符串 -> Date
public class Test04 {
public static void main(String[] args) {
 
String str1 = "2019年04月02日 15:34:12";
 
SimpleDateFormat df = new SimpleDateFormat();
df.applyPattern("yyyy年MM月dd日 HH:mm:ss");
 
Date date = null;
try {
date = df.parse(str1);
} catch (ParseException e) {
e.printStackTrace();
}
 
System.out.println(date);
}
}
 
注意:parse方法会产生ParseExcepion 检查时异常。
 
 
日历Calendar
日历本质上封装了一个long类型的time,表示距离历元的毫秒数。
Calendar内部提供了很多方法用于计算这个时间戳表示的一些信息。这些信息用字段(YEAR、MONTH)标记,可以通过get()方法获取,计算好的字段信息放到数组中,通过字段(索引)到数组中取值而已。
 
通常通过getInstance()工厂方法获取日历对象。
 
获取日历中的基本信息
public static void main(String[] args) {
// 更加当前语言环境、当前时区创建一个日历对象
Calendar cal = Calendar.getInstance();
System.out.println(cal);
 
// 获取日历中的年(YEAR)
int year = cal.get(Calendar.YEAR);
// 获取月份(0-11),月份从0开始
int month = cal.get(Calendar.MONTH);
// 获取一个月中的第几天,从1开始
int day = cal.get(Calendar.DAY_OF_MONTH);
 
// 获取一天的第几个小时(0-23)
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int millSecond = cal.get(Calendar.MILLISECOND);
 
// 获取星期,从周日开始
int week = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(week);
 
// 获取一个月有多少天?
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int minDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
 
}
 
需求:控制台输入本月日历
package cn.sxt03.calender;
import java.util.Calendar;
public class Test03 {
public static void main(String[] args) {
 
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, 5);
// 记录今天的日期
int today = cal.get(Calendar.DATE);
 
// 修改日历到本月1号
cal.set(Calendar.DATE, 1);
// 本月1号是星期几
int weekOfFirstDay = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(weekOfFirstDay);
 
int oneDayInMonth = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
int lastDayInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
 
// 修改日历到本月今天
cal.set(Calendar.DATE, today);
 
System.out.println("日\t一\t二\t三\t四\t五\t六");
// 输出本月1号前的空格
for(int i=1;i<weekOfFirstDay;i++) {
System.out.print("\t");
}
// 排列1-最大天数
for(int i=oneDayInMonth;i<=lastDayInMonth;i++) {
// 修改日历到指定的天
cal.set(Calendar.DATE, i);
 
if(i == today) {
System.out.print(i+"*\t");
}else {
System.out.print(i+"\t");
}
 
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
 
}
 
}
}
 
Math类
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
public static void main(String[] args) {
// 属性
System.out.println(Math.PI);
 
// 【1】求绝对值
System.out.println(Math.abs(-1));
 
// 【2】ceil/floor
// ceil(x) 返回比x大的最小整数 => 向上取整
double a = 10.1;
System.out.println(Math.ceil(a));
// floor(x) 返回比x小的最大整数 => 向下取整
System.out.println(Math.floor(a));
 
// 【3】求两个数的最大值、最小值
System.out.println(Math.max(10, 20));
System.out.println(Math.min(10, 20));
 
// 【4】pow(x,y) 求x的y次幂
System.out.println(Math.pow(2, 3));
 
// 【5】random()
 
// 【6】round 四舍五入
System.out.println(Math.round(10.5));
 
// sqrt() 开方
System.out.println(Math.sqrt(4));
 
// 【7】角度->弧度
System.out.println(Math.toRadians(180));
// 弧度->角度
System.out.println(Math.toDegrees(Math.PI/3));
 
// 【8】sin/cos/tan(c) 参数是弧度
System.out.println(Math.sin(Math.PI/6));
 
// 需求:求两点之间的距离(x1,y1)-(x2,y2)
// Math.sqrt(Math.pow((x1-x2), 2)+Math.pow((y1-y2), 2))
}
 
枚举
枚举概念
枚举(enum)是一组固定常量的组成的类型,它是一种自定义数据类型。
[修饰符] enum 枚举名称{
常量1,
常量2,
 
常量n[;]
}
注意:
[1]枚举中的常量是有限的。
[2] 枚举值不需要任何修饰符,默认static final 类型
 
需求:声明一个性别的枚举
public enum Gender{
男,
女,
保密
}
声明了一个枚举,它是一种数据类型,可以声明变量。
 
public class Test01 {
public static void main(String[] args) {
 
// 声明了一个Gender类型的变量
Gender gender = Gender.女;
System.out.println(gender);
}
}
 
总结:
[1]枚举类型是除基本数据类型、引用数类型外的另外一种自定义数据类型。一般可以把有限的、可列举的常量值定义成枚举类型。
[2] 通过Gender枚举声明的变量取值一定是Gender中声明的枚举值,不能取其他值。
 
 
enum 本质(C)
enum 本质上是继承于Enum类。enum实际上也是类。
public enum Gender{
// 枚举值本质上是Gender类型的一个实例
男,
女,
保密;
 
private Gender() {
System.out.println("gender");
}
 
public void showInfo() {
System.out.println("showinfo");
}
}
 
枚举和String的转换
public class Test02 {
public static void main(String[] args) {
 
// 【1】枚举值->String
Gender gender = Gender.女;
System.out.println(gender.toString());
 
// 【2】String->枚举值
String str = "女";
// 可能会IllegalArgumentException
Gender gender2 = Enum.valueOf(Gender.class, str);
System.out.println(gender2);
}
}
 
其他方法
public class Test03 {
public static void main(String[] args) {
 
// name() 获取枚举值的名称
// equals() 比较两个枚举值是否相等
 
Gender gender = Gender.保密;
System.out.println(gender.ordinal());
 
}
}
 
枚举和switch
public static void main(String[] args) {
 
Action action = Action.DEL;
 
switch (action) {
case ADD:{
System.out.println("add");
break;
}
case VIEW:{
System.out.println("view");
break;
}
case DEL:{
System.out.println("del");
break;
}
case EXIT:{
System.out.println("exit");
break;
}
}
}
 
 
File 类
java中文件或者目录都可以通过File类来表示。
 
public static void main(String[] args) {
// 路径分隔符。
/**
* win=>;
* mac|linux|unix=>:
*/
System.out.println(File.pathSeparator);
// 路径名称分隔符
/**
* win=> \
* mac|linux|unix => /
*/
System.out.println(File.separator);
}
 

13_日期时间、Math、枚举的更多相关文章

  1. 日期时间类:Date,Calendar,计算类:Math

    日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 计算机中时间2 ...

  2. 常用类(日期时间格式转换,date,枚举)

    1 常用类 1.1 日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms ...

  3. java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

    一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  4. Java常用类:包装类,String,日期类,Math,File,枚举类

    Java常用类:包装类,String,日期类,Math,File,枚举类

  5. 日期时间类——Java常用类

    时间戳(timestamp):距离特定时间的间隔. 计算机中的时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 格林尼治时间(GMT):是一个标准时间,用于全球 ...

  6. jquery 获取日期时间

    获取JavaScript 的时间使用内置的Date函数完成 var mydate = new Date();mydate.getYear(); //获取当前年份(2位)mydate.getFullYe ...

  7. 一起Polyfill系列:让Date识别ISO 8601日期时间格式

    一.什么是ISO 8601日期时间格式 ISO 8601是国际标准化组织制定的日期时间表示规范,全称是<数据存储和交换形式·信息交换·日期和时间的表示方法>. 示例: 1. 2014-12 ...

  8. js日期时间函数

    日期时间脚本库方法列表 Date.prototype.isLeapYear 判断闰年Date.prototype.Format 日期格式化Date.prototype.DateAdd 日期计算Date ...

  9. JS对日期时间的操作

    代码: //判断是否超期(有效期开始超过一年后算已超期) function IsEffect(effectDate) { var val = ""; var currentDate ...

随机推荐

  1. JAVA基础知识|synchronized和lock

    一.synchronized 是jvm的一个关键字,使用过程均由jvm控制 有三种使用方式: 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰代码块,同方法 修饰静态方法,作用 ...

  2. GO make&new区别

    自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html 1.make用于内建类型(map.slice 和channel)的内存 ...

  3. Lucene4.2源码解析之fdt和fdx文件的读写(续)——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压

    2       索引读取阶段 当希望通过一个DocId得到Doc的全部内容,那么就需要对fdx/fdt文件进行读操作了.具体的代码在CompressingStoredFieldsReader类里面.与 ...

  4. IdentityServer4入门五:错误处理

    在访问ClientMvc的保护页面时,会跳转到IdentityMvc页面,这时会出现类似下图的错误界面,让人无从入手. 如果你尝试按文字所说的内容去处理.你发现项目已正确设置.其实上面的内容是固定的, ...

  5. createElement与createDocumentFragment的一些小区别

    在DOM操作里,createElement是创建一个新的节点,createDocumentFragment是创建一个文档片段. 网上可以搜到的大部分都是说使用createDocumentFragmen ...

  6. linux查看文件的编码格式的方法 set fileencoding

    查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中 可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决 用 ...

  7. SpringBoot2.X中的静态资源访问失效

    今天开始使用SpringBoot写项目,于是先让其能够访问静态资源,但是配置半天也不能访问我的helloWorld页面,原来,在SpringBoot2.x中,一下静态资源路径不生效了. classpa ...

  8. excel_vlookup函数_python代码实现

    python入门经典视频系列教程(免费,2K超清,送书) https://study.163.com/course/courseMain.htm?courseId=1006183019&sha ...

  9. iOS 将一个UIImage缩放到指定Size

    这方法挺实用的,直接调用就可以得到想要的size. //将一个UIImage缩放变换到指定Size -(UIImage*) OriginImage:(UIImage *)image scaleToSi ...

  10. using kafkacat reset kafka offset

    1. install kafkacat Ubuntu apt-get install kafkacat CentOS install deepenency yum install librdkafka ...