首页 >> 大全

Java学习day015(日期,格式化)

2023-06-24 大全 60 作者:考证青年

文章目录 数字格式化Junit

日期相关操作

Date类

格式化时间日期的对象
SimpleDateFormat
在jdk8之后,系统不再推荐使用这些类
如上的的日期和时间处理类都是非线程安全类,在早期没有高并发的情况可以正常使用。
高并发的情况下,使用这些类,都会出现非线程安全问题!!!!

JDK8之前获取当前系统时间

JDK8之前的日期操作了解即可

 Date date = new Date();System.out.println(date); // Mon Jul 26 21:02:16 CST 2021

Date date = new Date();// 获取当前时间的时间戳, 1970-01-01 00:00:00 距离当前的毫秒数
System.out.println(date.getTime()); // 1627304881732// java还可以通过System类获取时间戳,可以获取当前时间戳
System.out.println(System.currentTimeMillis()); // 1627304881732// 日期对象 --->  字符串  格式化时间
//	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String format = sdf.format(date);
// System.out.println(format);  // 2021-07-26 21:10:30
System.out.println(format);  // 2021年07月26日 21时08分01秒// 字符串 ---> 日期对象
String strTime = "2018年10月8日 12:12:12";
DateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date2 = sdf2.parse(strTime); // 这个地方会报编译的错误  【throws ParseException】
System.out.println(date2); // Mon Oct 08 12:12:12 CST 2018

因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.类所取代

科普:千年虫BUG

一开始是使用六位数字来储存时间,其表现形式就类似“95.11.02”,意思就是1995年11月2号

如果到了2000年,那前两位数字应该就是“00”,而计算机终归不是人类,“00”对它们来说不一定就是2000年,也有可能是公元1900年或公元1000年,这样就会得到不正确的计算结果,进而引发一系列的问题

可以看到上面的方法都划了横线,就代表这个方法不推荐使用

Date date = new Date();// 千年虫BUG事件System.out.println(date.getYear()); // 121  (ps:121 + 1900 = 2021)System.out.println(date.getMonth() + 1); // 7System.out.println(date.getDate()); // 26

JDK8之后

package com.openlab.day15.date;import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;public class JDK8DateTIme {public static void main(String[] args) {// 本地日期LocalDate localDate = LocalDate.now();System.out.println(localDate); // 2021-07-26System.out.println(localDate.getDayOfMonth()); // 26System.out.println(localDate.getDayOfYear()); // 207// 本地时间LocalTime localTime = LocalTime.now();System.out.println(localTime); // 21:19:58.785762400// 日期+时间的对象LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime); // 2021-07-26T21:19:58.785762400// 专门用来格式化日期时间的对象String str = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println(str); // 2021-07-26 21:19:58// 将日期字符串解析为日期对象LocalDateTime ldt = LocalDateTime.parse("2000年03月08日 14:52:18", DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"));System.out.println(ldt); // 2000-03-08T14:52:18// 伦敦标准时间,就是经度为0的,0时区时间Instant instant = Instant.now();System.out.println(instant); // 2021-07-26T13:19:58.798728800Z}
}

package com.openlab.day15.date;
import java.util.Calendar;
public class TestCalendar {public static void main(String[] args) {Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DATE);int hour = calendar.get(Calendar.HOUR);int minute = calendar.get(Calendar.MINUTE);int s = calendar.get(Calendar.SECOND);System.out.println(year +"-"+ month +"-"+ day + " "+ hour +":"+ minute +":"+s);// 2021-7-26 9:23:8}
}

package com.openlab.day15.date;import java.math.BigDecimal;public class TestBigDecimal {public static void main(String[] args) {// 计算机中的浮点数,并不像整数那样存储,是通过一种算法得到// 这样的如果我们使用浮点数计算时,可能得到是一个相似值System.out.println(0.1 + 0.2); // 0.30000000000000004// 高精度行业:航天、经济、银行、金融// 根据不同行业需求,选择对应的构造函数进行计算BigDecimal bigDecimal1 = new BigDecimal("0.1");BigDecimal bigDecimal2 = new BigDecimal("0.2");BigDecimal add = bigDecimal1.add(bigDecimal2);System.out.println(add); // 0.3System.out.println(bigDecimal1.subtract(bigDecimal2)); // -0.1System.out.println(bigDecimal1.divide(bigDecimal2)); // 0.2System.out.println(bigDecimal1.multiply(bigDecimal2)); // 0.02}
}

数字格式化

package com.openlab.day15.date;import org.junit.Test;import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;/*** Junit java提供的单元测试的框架*/
public class TestNumberFormat {@Testpublic void test01() { // 获取货币实例NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();System.out.println(currencyInstance.format(12345)); // ¥12,345.00}@Testpublic void test02() { // 获取货币实例System.out.println(NumberFormat.getCurrencyInstance(Locale.US).format(12345)); // $12,345.00System.out.println(NumberFormat.getCurrencyInstance(Locale.UK).format(12345)); // £12,345.00}// 千分位分隔符@Testpublic void test03() { // 获取号码实例System.out.println(NumberFormat.getNumberInstance().format(1235.63941)); // 1,235.639}@Testpublic void test04() { // 获取百分比实例System.out.println(NumberFormat.getPercentInstance().format(56.2378)); // 5,624%}@Testpublic void test05() {double num = 23465.1264566;// # 主要是在.之后,表示要保留的小数位DecimalFormat df = new DecimalFormat("0.0000");String format = df.format(num);System.out.println(format); // 23465.1265DecimalFormat df2 = new DecimalFormat("0E0");System.out.println(df2.format(num)); // 2E4}@Testpublic void test06() {double pi = 3.1415927; // 十进制格式化System.out.println(new DecimalFormat("0").format(pi)); // 3System.out.println(new DecimalFormat("0.00").format(pi)); // 3.14//取两位整数和三位小数,整数不足部分以0填补。System.out.println(new DecimalFormat("00.000").format(pi));// 03.142//取所有整数部分System.out.println(new DecimalFormat("#").format(pi)); // 3//以百分比方式计数,并取两位小数System.out.println(new DecimalFormat("#.##%").format(pi)); // 314.16%long c = 299792458;System.out.println(new DecimalFormat("#.#####E0").format(c));// 2.99792E8System.out.println(new DecimalFormat("00.####E0").format(c));// 29.9792E7System.out.println(new DecimalFormat(",###").format(c));// 299,792,458System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));}}

Junit

Junit是单元测试框架工具,在项目开发中是经常用到的,利用进行单元测试非常简单方便,所以熟悉Junit是很有必要的。

Junit优点:

安装使用方便可以同时执行多个测试方法测试结果直观明了

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了