范例1:lib\commons-lang3-3.8.1.jar 我们需要在项目根目录下建立文件夹lib下载软件包commons-lang3-3.8.1.jar
package com.myth;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;
public class DateMemo {
public static void main(String[] args) throws Exception {
String[] formatDate = {
"HH:mm",
"HH:mm:ss",
"yyyy/MM",
"yyyy/MM/dd",
"yyyy/MM/dd HH:mm",
"yyyy/MM/dd HH:mm:ss",
"yyyy-MM",
"yyyy-MM-dd",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH:mm:ss",
"yyyy.MM",
"yyyy.MM.dd",
"yyyy.MM.dd HH:mm",
"yyyy.MM.dd HH:mm:ss",
"yyyyMM",
"yyyyMMdd",
"yyyyMMddHHmm",
"yyyyMMddHHmmss",
"yyyy年MM月",
"yyyy年MM月dd日",
"yyyy年MM月dd日 HH时mm分",
"yyyy年MM月dd日 HH时mm分ss秒"};
// 2019-09-09 00:25:48 1567958400000
long startTime1 = System.nanoTime();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
for (int i = 0; i < 100000; i++) {
Long indexSmallFile = LocalDateTime.parse("2019-09-09 00:25:36", formatter).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
System.out.println(indexSmallFile);
}
long endTime1 = System.nanoTime();
double timeTaken1 = (endTime1 - startTime1) / 1e9;
long startTime2 = System.nanoTime();
for (int i = 0; i < 100000; i++) {
Timestamp t = Timestamp.valueOf("2019-09-09 00:25:36");
System.out.println(t.getTime());
}
long endTime2 = System.nanoTime();
double timeTaken2 = (endTime2 - startTime2) / 1e9;
long startTime3 = System.nanoTime();
for (int i = 0; i < 100000; i++) {
Date d1 = DateUtils.parseDate("2019-09-09 00:25:36", formatDate);
System.out.println(d1.getTime());
}
long endTime3 = System.nanoTime();
double timeTaken3 = (endTime3 - startTime3) / 1e9;
System.out.println("Time1 Taken in seconds:" + timeTaken1);
System.out.println("Time2 Taken in seconds:" + timeTaken2);
System.out.println("Time3 Taken in seconds:" + timeTaken3);
}
}
范例2
常见的日期时间或者时间格式统一转换为 yyyy-MM-dd HH:mm:ss 日期时间格式
package com.myth;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.Locale;
import org.apache.commons.lang3.time.DateUtils;
public class DateMemo {
public static void main(String[] args) throws Exception {
String[] formatDate = {
"HH:mm",
"HH:mm:ss",
"yyyy/MM",
"yyyy/MM/dd",
"yyyy/MM/dd HH:mm",
"yyyy/MM/dd HH:mm:ss",
"yyyy-MM",
"yyyy-MM-dd",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH:mm:ss",
"yyyy.MM",
"yyyy.MM.dd",
"yyyy.MM.dd HH:mm",
"yyyy.MM.dd HH:mm:ss",
"yyyyMM",
"yyyyMMdd",
"yyyyMMddHHmm",
"yyyyMMddHHmmss",
"yyyy年MM月",
"yyyy年MM月dd日",
"yyyy年MM月dd日 HH时mm分",
"yyyy年MM月dd日 HH时mm分ss秒"};
long startTime3 = System.nanoTime();
Date d1 = DateUtils.parseDate("1949-10-02 03:52:41",Locale.CHINA, formatDate);
System.out.println(d1.toInstant().atOffset(ZoneOffset.ofHours(8)).toString().substring(0, 19));
long endTime3 = System.nanoTime();
double timeTaken3 = (endTime3 - startTime3) / 1e9;
System.out.println("Time3 Taken in seconds:" + timeTaken3);
//System.out.println(String.format("%3.2f", 5678.256));
// System.out.println(String.format("%02d", 8));
/*
652325194910021225 94426470.11 1949-10-02 03:52:41 87.57%
211402194910023840 1103727928.10 1949-10-02 07:24:44 13.86%
540328194910026785 1951003671.81 1949-10-02 00:17:21 73.53%
120102194910021886 1126189111.98 1949-10-02 11:35:55 25.31%
230622194910034652 381625190.28 1949-10-03 04:23:20 82.95%
421024194910031772 894982993.59 1949-10-03 06:14:24 31.80%
120116194910026131 1135304156.36 1949-10-02 20:55:11 73.31%
*/
}
}
未完待续更新 ... ...
使用不同步长遍历数组的方式,单线程下速度几乎一样
package com.zigoo;
public class ArrayMemo {
public static void main(String[] args) throws Exception {
int num = 98;
String[] arrStr = new String[num];
for (int i = 0; i < arrStr.length; i++) {
arrStr[i] = "Line" + i;
}
// 步长设置为2,循环1次获取2条数据;
for (int i = 0, j = 1; i < arrStr.length; i += 2, j++) {
if (i+1 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1]);
} else{
System.out.println(j + " " + arrStr[i]);
}
}
// 步长设置为3,循环1次获取3条数据;
for (int i = 0, j = 1; i < arrStr.length; i += 3, j++) {
if (i + 2 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1] + " + " + arrStr[i + 2]);
} else if (i+1 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1]);
} else{
System.out.println(j + " " + arrStr[i]);
}
}
}
}
时间比较
package com.zigoo;
public class Example {
public static void main(String[] args) throws Exception {
int num = 1500000;
String[] arrStr = new String[num];
for (int i = 0; i < arrStr.length; i++) {
arrStr[i] = "Line" + i;
}
long time0Start = System.currentTimeMillis();
for (int i = 0; i < arrStr.length; i++) {
System.out.println(i + " " + arrStr[i]);
}
long time0End = System.currentTimeMillis();
long second0Total = (time0End - time0Start) / 1000;
long hour0 = second0Total / 3600;
long minute0 = (second0Total - hour0 * 3600) / 60;
long second0 = (second0Total - hour0 * 3600 - minute0 * 60);
System.out.println(time0End - time0Start);
long time1Start = System.currentTimeMillis();
// 步长设置为2,循环1次获取2条数据;
for (int i = 0, j = 1; i < arrStr.length; i += 2, j++) {
if (i + 1 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1]);
} else {
System.out.println(j + " " + arrStr[i]);
}
}
long time1End = System.currentTimeMillis();
long second1Total = (time1End - time1Start) / 1000;
long hour1 = second1Total / 3600;
long minute1 = (second1Total - hour1 * 3600) / 60;
long second1 = (second1Total - hour1 * 3600 - minute1 * 60);
System.out.println(time1End - time1Start);
long time2Start = System.currentTimeMillis();
// 步长设置为3,循环1次获取3条数据;
for (int i = 0, j = 1; i < arrStr.length; i += 3, j++) {
if (i + 2 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1] + " + " + arrStr[i + 2]);
} else if (i + 1 < arrStr.length) {
System.out.println(j + " " + arrStr[i] + " + " + arrStr[i + 1]);
} else {
System.out.println(j + " " + arrStr[i]);
}
}
long time2End = System.currentTimeMillis();
long second2Total = (time2End - time2Start) / 1000;
long hour2 = second2Total / 3600;
long minute2 = (second2Total - hour2 * 3600) / 60;
long second2 = (second2Total - hour2 * 3600 - minute2 * 60);
System.out.println(time2End - time2Start);
System.out.println("A = " + hour0 + "小时" + minute0 + "分" + second0 + "秒");
System.out.println("B = " + hour1 + "小时" + minute1 + "分" + second1 + "秒");
System.out.println("C = " + hour2 + "小时" + minute2 + "分" + second2 + "秒");
}
}
当测试数据有1500000(150万)条时:
A = 0小时1分47秒
B = 0小时1分44秒
C = 0小时1分56秒
当测试数据有5000000(500万)条时:
A = 0小时6分15秒
B = 0小时6分16秒
C = 0小时6分59秒