import jdk.management.resource.internal.inst.SocketOutputStreamRMHooks;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
public class RunaMain {
public static void main(String[] args) throws ParseException {
System.out.println(" /Date的用法*******/");
//创建日期对象,返回当前日期
Date date = new Date();
System.out.println(date);
//返回日期date距离1970-1-1 00:00:00经过的毫秒数
System.out.println(date.getTime());
//把日期转化为当前的格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//输出结果为:2018年10月20日 18:24:12
System.out.println(simpleDateFormat.format(date));
// System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()));
//反过来,把日期格式的字符串转化为日期
String text = "2018年10月20日 18:50:03";
//特别注意日期格式中间空格要和下面代码中空格一一对应
SimpleDateFormat S2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date1 = S2.parse(text);
System.out.println(date1);
//返回日期date距离1970-1-1 00:00:00经过的毫秒数
long millis = System.currentTimeMillis();
System.out.println(millis);
//把毫秒数转化为日期对象
Date date2 = new Date(millis);
System.out.println(date2);
System.out.println("/***************************Calendar的用法********************/");
//calendar是抽象类可以通过静态getInstance()方法创建对象
Calendar calendar = Calendar.getInstance();
//get()返回某个字段的值
System.out.print(calendar.get(Calendar.YEAR) + "-");
//月份从0开始
System.out.print(calendar.get(Calendar.MONTH) + "-");
System.out.print(calendar.get(Calendar.DAY_OF_MONTH) + " ");
System.out.print(calendar.get(Calendar.HOUR_OF_DAY) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
//设置字段的值
calendar.set(Calendar.DAY_OF_MONTH, 22);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.DAY_OF_MONTH, 44);
//当月份设置超过字段的上限值,那么会影响上个字段的值,比如9月变成现在10月了,天数也不是44而是月份上线达到溢出13
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.getTime());
System.out.println(calendar.getTimeInMillis());
//线程安全的日期类:在java.time包中
System.out.println("*******************线程安全的日期类:在java.time包中(从jdk8开始才有的)*****************");
//日期
LocalDate date3 = LocalDate.now();
System.out.println(date);
//时间
LocalTime time = LocalTime.now();
System.out.println(time);
//既有日期又有时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
//对日期格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
System.out.println(localDateTime.format(formatter));
//把文本转化为日期类
String txt = "2018年10月20日 21:31:43";
formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//LocalDateTime的静态方法parse(txt,formatter),使用formatter格式把文本转换为日期对象
System.out.println(LocalDateTime.parse(txt, formatter));
System.out.println("************************************与数学相关的类************************************");
System.out.println(Math.cbrt(1000000));//立方根
System.out.println(Math.sqrt(100));//平方根
System.out.println(Math.pow(3, 4));//3的4次方
for (int i = 0; i < 10; i++) {
//产生[0,1)之间的随机数
System.out.println(Math.random());
}
System.out.println("*******************************************数字格式化 DecimalFormat ******************************************");
// #表示任意数字 ; 0表示任意数字不足的位数补0; ,表示千分位 ; .表示小数点;
DecimalFormat decimalFormat = new DecimalFormat("###,###.0000");
System.out.println(decimalFormat.format(123456.45));
System.out.println("******************************* Random 随机数类 ***************************************");
Random random = new Random();
for (int j = 1; j <= 10; j++) {
//产生小数[0,1)
System.out.println(random.nextDouble());
}
System.out.println("-----------------------------");
for (int j = 0; j <= 10; j++) {
//产生整数
System.out.println(random.nextInt());
}
System.out.println("---------**************------------");
for (int j = 0; j <= 10; j++) {
//产生指定范围的随机整数[0,100)
System.out.println(random.nextInt(100));
}
System.out.println("************************* BigInteger / BigDecimal ***************************");
//大的整数&大的小数,科学运算,财务预算时候使用,精度要求比较高时候使用
//val:变量长度越长精度越高
BigInteger k1 = new BigInteger("1234456789988979979977");
BigInteger k2 = new BigInteger("898988956789988979979977");
//相加
BigInteger k3 = k1.add(k2);
System.out.println(k3);
//相减
k3 = k2.subtract(k1);
System.out.println(k3);
//相乘
k3 = k1.multiply(k2);
System.out.println(k3);
System.out.println("******************* BigDecimal ****************************************");
//大的小数
BigDecimal m1=new BigDecimal("12345678979.4564311234");
BigDecimal m2=new BigDecimal("4567899898565.899878978");
//小数有可能除不断的情况,小数相除时,一般指定最后小数的处理方式 随便选择RoundingMode.UP一个变量,否则报错
BigDecimal m3 = m2.divide(m1, RoundingMode.UP);
System.out.println(m3);
}
}
///**************** 下面是测试结果演示*********************************///
/Date的用法*******/
Sat Oct 20 23:11:03 CST 2018
1540048263320
2018年10月20日 23:11:03
Sat Oct 20 18:50:03 CST 2018
1540048263398
Sat Oct 20 23:11:03 CST 2018
/*******Calendar的用法/
2018-9-20 23:11:3
22
13
10
Tue Nov 13 23:11:03 CST 2018
1542121863398
**线程安全的日期类:在java.time包中(从jdk8开始才有的)
Sat Oct 20 23:11:03 CST 2018
23:11:03.523
2018-10-20T23:11:03.523
2018年10月20日 23:11:03
2018-10-20T21:31:43
与数学相关的类
100.0
10.0
81.0
0.5343810176195
0.42155958671973204
0.08485319645743916
0.47378658961006626
0.06051313743899556
0.15120641327178974
0.1451473663131415
0.5309266658616042
0.5288048139115853
0.05110018312180442
*******************************************数字格式化 DecimalFormat ******************************************
123,456.4500
******************************* Random 随机数类 ***************************************
0.14663205207231111
0.014831252326256261
0.7978704489835184
0.020736390351512424
0.24199857782992396
0.6722133093094831
0.35307030168184794
0.06421290414920633
0.8886663449160382
0.5277880310292538
-1505278265
1652927467
626382616
1619882559
1742906962
-1938405145
1839359425
1574796686
1869859954
-1684356056
-1534274733
---------**************------------
31
22
90
45
10
48
5
57
89
93
96
************************* BigInteger / BigDecimal ***************************
900223413579977959959954
897754500000000000000000
1109763021834511624057175111328501307320920529
******************* BigDecimal ****************************************
369.999892770
Process finished with exit code 0