成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用java8的格式化Date

這篇文章主要講解了“如何使用java8的格式化Date”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用java8的格式化Date”吧!

我們提供的服務有:網站設計、網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、北林ssl等。為上1000家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的北林網站制作公司

SimpleDateFormat 線程不安全

眾所周知 SimpleDateFormat 線程不安全,不少朋友被其坑過。

public class ExampleClass {

	private static final Pattern dateCreateP = Pattern.compile("Дата подачи:\\s*(.+)");
	private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy");

	public static void main(String[] args) {
		ExecutorService executor = Executors.newFixedThreadPool(100);
		while (true) {
			executor.submit(new Runnable() {
				@Override
				public void run() {
					workConcurrently();
				}
			});
		}
	}

	public static void workConcurrently() {
		Matcher matcher = dateCreateP.matcher("Дата подачи: 19:30:55 03.05.2015");
		Timestamp startAdvDate = null;
		try {
			if (matcher.find()) {
				String dateCreate = matcher.group(1);
				startAdvDate = new Timestamp(sdf.parse(dateCreate).getTime());
			}
		} catch (Throwable th) {
			th.printStackTrace();
		}
		System.out.print("OK ");
	}
}

And result :

OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK java.lang.NumberFormatException: For input string: ".201519E.2015192E2"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at java.text.DigitList.getDouble(DigitList.java:169)
at java.text.DecimalFormat.parse(DecimalFormat.java:2056)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1869)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514)
at java.text.DateFormat.parse(DateFormat.java:364)
at com.nonscalper.webscraper.processor.av.ExampleClass.workConcurrently(ExampleClass.java:37)
at com.nonscalper.webscraper.processor.av.ExampleClass$1.run(ExampleClass.java:25)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

解決方案

  1. 每次 new (實例化) SimpleDateFormat

  2. 利用 ThreadLocal 確保每個線程都可以得到單獨的一個 SimpleDateFormat。

public class DateUtil {
	private static final ThreadLocal<SimpleDateFormat> local = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

	public static String format(Date date) {
		return local.get().format(date);
	}

	public static Date parse(String dateStr) throws ParseException {
		return local.get().parse(dateStr);
	}
}
  1. commons-lang3 中的 FastDateFormat。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>${commons-lang3-version}</version>
</dependency>

性能比拼

性能咋樣,jmh 來一把,源碼見:https://github.com/lets-mica/mica-jmh

# JMH version: 1.21
# VM version: JDK 1.8.0_221, Java HotSpot(TM) 64-Bit Server VM, 25.221-b11

Benchmark             Mode  Cnt       Score       Error  Units
newSimpleDateFormat  thrpt    5  114072.841 ±   989.135  ops/s
threadLocal          thrpt    5  348207.331 ± 46014.175  ops/s
fastDateFormat       thrpt    5  434391.553 ±  7799.593  ops/s

結果:fastDateFormat 得分最高。當然你覺得這樣就完了?

利用 Instant + DateTimeFormatter

mica 1.2.1 中我們利用 Instant 來中轉 Date 使用 DateTimeFormatter 格式化。

public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());

public String format(Date date) {
	return DATETIME_FORMATTER.format(date.toInstant());
}

注意:DateTimeFormatter 格式化 Instant 需要指定時區(qū)

jdk 8 壓測結果

# JMH version: 1.21
# VM version: JDK 1.8.0_221, Java HotSpot(TM) 64-Bit Server VM, 25.221-b11

Benchmark         Mode  Cnt       Score      Error  Units
fastDateFormat   thrpt    5  417338.980  56543.104  ops/s
toInstantFormat  thrpt    5  371028.709  72059.917  ops/s

jdk 11 壓測結果

# JMH version: 1.21
# VM version: JDK 11.0.4, OpenJDK 64-Bit Server VM, 11.0.4+10-b304.69

Benchmark         Mode  Cnt       Score      Error  Units
fastDateFormat   thrpt    5  384637.138   7402.690  ops/s
toInstantFormat  thrpt    5  487482.436  12490.986  ops/s

感謝各位的閱讀,以上就是“如何使用java8的格式化Date”的內容了,經過本文的學習后,相信大家對如何使用java8的格式化Date這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

網站題目:如何使用java8的格式化Date
標題路徑:http://jinyejixie.com/article24/gpigje.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站營銷、網頁設計公司、搜索引擎優(yōu)化響應式網站、網站收錄、移動網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司
安吉县| 永济市| 延吉市| 钦州市| 施秉县| 同德县| 米脂县| 江津市| 博兴县| 辽阳县| 英吉沙县| 石泉县| 虞城县| 迁安市| 常德市| 洛浦县| 本溪市| 微山县| 修文县| 台中市| 天津市| 曲阳县| 洞头县| 衢州市| 郎溪县| 大安市| 奉贤区| 泰宁县| 溧阳市| 宜兰市| 浪卡子县| 铁力市| 容城县| 绥德县| 江北区| 阿克| 施秉县| 无为县| 岐山县| 青田县| 仁布县|