日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 格式化日期到毫秒_关于日期:Java – SimpleDateFormat格式化程序,以毫秒为单位返回纪元时间...

發布時間:2023/12/14 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 格式化日期到毫秒_关于日期:Java – SimpleDateFormat格式化程序,以毫秒为单位返回纪元时间... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

我是Java和編碼的新手 - 我有一些代碼以下列格式yyyy.MM.dd HH:mm:ss:ms返回時間戳,如下所示:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");

返回:

2017.07.19 11:42:30:423

有沒有辦法編輯上面的"SimpleDateFormat格式化程序"代碼,將日期/時間作為包含毫秒的紀元時間戳返回,以便返回的值按照下面的格式進行格式化?

1500464550423

我希望我可以修改SimpleDateFormat formatter代碼的("yyyy.MM.dd HH:mm:ss:sss")部分來執行此操作。

非常感謝任何幫助或建議。

謝謝

這對我來說不是100%清楚。 你是說你收到2017.07.19 11:42:30:423作為一個字符串,你想將它轉換為自紀元以來的毫秒數?

這是正確的 - 時間戳值后來在代碼中使用并用于創建一個變量字符串 - 返回時間戳的部分是"+ formatter.format(time)"而沒有引號 - 這就是我希望的原因 我可以修改("yyyy.MM.dd HH:mm:ss:sss")部分代碼,以毫秒為單位返回epoc,因為我不知道如何修改代碼以使用人們在這里建議的其他方法。..

在格式模式字符串中使用大小寫時遇到一個簡單的錯誤(這些區分大小寫)。更糟糕的是,你正在使用舊的麻煩的SimpleDateFormat類。它的許多問題之一是它沒有告訴你問題是什么。

所以我建議您使用現代Java日期和時間API(我故意使用您的格式模式字符串逐字):

String receivedTimetamp ="2017.07.19 11:42:30:423";

DateTimeFormatter parseFormatter

= DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss:sss");

LocalDateTime dateTime = LocalDateTime.parse(receivedTimetamp, parseFormatter);

System.out.println(dateTime);

此代碼拋出IllegalArgumentException: Too many pattern letters: s。我希望這可以讓你意識到這樣一個事實,即你使用的是兩秒鐘的秒數和三秒鐘的秒數。如果仍然不清楚,文檔將告訴您小寫s在幾秒內是正??確的,而分數需要大寫s。我們來修理:

DateTimeFormatter parseFormatter

= DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss:SSS");

現在代碼打印2017-07-19T11:42:30.423,因此我們設法正確解析字符串。

要轉換為毫秒,我們仍然缺少一個重要的信息:在什么時區應該解釋時間戳?我認為兩個明顯的猜測是UTC和你當地的時區(我不知道)。試試UTC:

System.out.println(dateTime.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli());

這會產生1500464550423,這是您要求的數字。我想我們已經完成了。

如果您想要JVM的時區設置,請使用.atZone(ZoneId.systemDefault())而不是.atOffset(ZoneOffset.UTC),但要注意該設置可能會被同一JVM中運行的其他軟件更改,因此這很脆弱。

感謝您提供了很好的解釋 - 我很難理解如何將它集成到我的代碼中,因為我對Java很新,但是我不懷疑你的建議是否正確 - 我需要花一些時間來工作這個

首先,查看SimpleDateFormat的文檔。對應于毫秒的模式是大寫S,而小寫S對應于秒。問題是SimpleDateFormat通常不會抱怨并嘗試以秒為單位解析423,將此金額添加到結束日期(給出不正確的結果)。

無論如何,SimpleDateFormat只是將String解析為java.util.Date或將Date格式化為String。如果你想要epoch millis值,你必須從Date對象獲取它:

// input string

String s ="2017.07.19 11:42:30:423";

// use correct format ('S' for milliseconds)

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:SSS");

// parse to a date

Date date = formatter.parse(s);

// get epoch millis

long millis = date.getTime();

System.out.println(millis); // 1500475350423

問題是SimpleDateFormat使用系統的默認時區,因此上面的最終值(1500475350423)將等于系統時區中的特定日期和時間(可能與您的時區不同 - 僅用于記錄,我的系統的默認時區是America/Sao_Paulo)。如果要指定此日期在哪個時區,則需要在格式化程序中設置(在調用parse之前):

// set a timezone to the formatter (using UTC as example)

formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

這樣,millis的結果將是1500464550423(相當于UTC中的指定日期和時間)。

要執行相反的操作(從millis值創建日期),您必須創建一個Date對象,然后將其傳遞給格式化程序(同時注意設置格式化程序的時區):

// create date from millis

Date date = new Date(1500464550423L);

// use correct format ('S' for milliseconds)

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:SSS");

formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

// format date

String formatted = formatter.format(date);

Java新的日期/時間API

舊類(Date,Calendar和SimpleDateFormat)存在許多問題和設計問題,并且它們將被新API替代。

如果您使用的是Java 8,請考慮使用新的java.time API。與舊的API相比,它更容易,更少出錯并且更不容易出錯。

如果您使用Java <= 7,則可以使用ThreeTen Backport,這是Java 8的新日期/時間類的一個很好的后端。對于Android,還有ThreeTenABP(更多關于如何在這里使用它)。

以下代碼適用于兩者。

唯一的區別是包名稱(在Java 8中是java.time,在ThreeTen Backport(或Android的ThreeTenABP)中是org.threeten.bp),但類和方法名稱是相同的。

由于輸入String沒有時區信息(僅限日期和時間),首先我將其解析為LocalDateTime(表示沒有時區的日期和時間的類)。然后我將此日期/時間轉換為特定時區并從中獲取millis值:

// input string

String s ="2017.07.19 11:42:30:423";

// use correct format ('S' for milliseconds)

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss:SSS");

// as the input string has no timezone information, parse it to a LocalDateTime

LocalDateTime dt = LocalDateTime.parse(s, formatter);

// convert the LocalDateTime to a timezone

ZonedDateTime zdt = dt.atZone(ZoneId.of("Europe/London"));

// get the millis value

long millis = zdt.toInstant().toEpochMilli(); // 1500460950423

該值現在1500460950423,相當于倫敦時區的指定日期和時間。

請注意,API使用IANA時區名稱(始終采用Region/City格式,如America/Sao_Paulo或Europe/Berlin)。

避免使用3個字母的縮寫(如CST或PST),因為它們不明確且不標準。

您可以通過調用ZoneId.getAvailableZoneIds()獲取可用時區列表(并選擇最適合您系統的時區)。

如果要使用UTC,也可以使用ZoneOffset.UTC常量。

相反,您可以獲取millis值來創建Instant,將其轉換為時區并將其傳遞給formatter:

// create Instant from millis value

Instant instant = Instant.ofEpochMilli(1500460950423L);

// use correct format ('S' for milliseconds)

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss:SSS");

// convert to timezone

ZonedDateTime z = instant.atZone(ZoneId.of("Europe/London"));

// format

String formatted = z.format(formatter);

你可以試試

long time = System.currentTimeMillis();

我認為op希望從字符串日期開始

你是對的......然而,這個問題沒有說明

這只是對一個問題的回答......假設作者正在從系統中取出日期

String strDate ="Jun 13 2003 23:11:52.454 UTC";

DateTimeFormatter dtf ?= DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");

ZonedDateTime ? ? zdt ?= ZonedDateTime.parse(strDate,dtf);

System.out.println(zdt.toInstant().toEpochMilli()); ?// 1055545912454

很好的代碼,但缺乏解釋。僅限代碼的答案很少有用,請解釋您如何解決提問者的問題。

這個主題可能會有所幫助stackoverflow.com/questions/6687433/…

第一個建議是轉移到java8 java.time API而不是學習損壞的java.date API

然后做:

Instant i = Instant.now();

System.out.println(i.toEpochMilli());

在你的情況下你可以做:

LocalDateTime myldt = LocalDateTime.parse("2017-06-14 14:29:04",

DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

System.out.println(myldt.toInstant(ZoneOffset.UTC).toEpochMilli());

請注意,只要您使用api玩更多內容,您就會找到更多方法來實現相同的目標,最后您將結束調用toEpochMilli

感謝您的評論 - 我上面引用的代碼是代碼塊的一部分,我不確定如何集成您建議的內容 - 理想情況下我需要了解是否/如何使用"SimpleDateFormat"函數返回epoch timestamp因為這意味著我不需要重新jig任何其他代碼,因為我的理解是有限的

是。而不是使用SimpleDateFormat使用DateTimeFormatter

謝謝,我將有一個游戲,看看我是否可以在代碼中為"DateTimeFormatter"字面交換"SimpleDateFormat"并使用"SSS"作為格式化程序(?) - 我對java很新,所以請原諒我的無知!

你將需要java 8來使用該類

如果你有java.util.Date那么調用getTime()將返回自紀元以來的millis數。例如:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");

Date dateToBeFormatted = new Date();

// this will print a datetime literal on the above format

System.out.println(formatter.format(dateToBeFormatted));

// this will print the number of millis since the Java epoch

System.out.println(dateToBeFormatted.getTime());

這里的關鍵點是,為了獲得自紀元以來的毫秒數,您不需要SimpleDateFormatter,因為自紀元以來的毫秒數是Date的屬性。

感謝您的評論 - 我上面引用的代碼是代碼塊的一部分,我不確定如何集成您建議的內容 - 理想情況下我需要了解是否/如何使用"SimpleDateFormat"函數返回epoch timestamp因為這意味著我不需要重新jig任何其他代碼,因為我的理解是有限的

我已經更新了答案以包含一個例子,希望有所幫助。

謝謝你的故障 - 這對我的理解有幫助!

總結

以上是生活随笔為你收集整理的java 格式化日期到毫秒_关于日期:Java – SimpleDateFormat格式化程序,以毫秒为单位返回纪元时间...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂网在线最新版www中文网 | 88av.com | 亚洲男人精品 | 国产精品自产拍高潮在线观看 | 人人草人人干 | 999热视频 | 国产高清第一页 | 在线观看黄色网 | 日韩黄色网络 | 爱情岛论坛亚洲品质自拍 | 欧美一区二区三区 | 国产精品国产馆在线真实露脸 | 国产精品宾馆在线精品酒店 | 久热免费在线 | 国产又黄又粗又长 | 一区二区在线免费看 | 亚洲精品美女久久久 | 国产一区二区三区四区五区六区 | 国产一区二区在线观看免费 | 少妇人妻真实偷人精品视频 | 亚洲欧美一区二区三区不卡 | 亚洲国产www| 毛片av免费看 | 国产丝袜在线播放 | 精品成人在线视频 | 日韩视频一区二区三区四区 | 四虎在线网址 | 小视频免费在线观看 | 国内自拍视频在线播放 | 黑人一区二区三区 | 久久精品视频中文字幕 | 国产18在线| 久久综合久久鬼 | 日本高清视频一区二区 | 国产一区二区高清视频 | 黄色影音 | 无码国产精品一区二区色情男同 | 精品人妻伦九区久久aaa片 | 精品一区二区欧美 | 国产一区二区久久 | 欧美黄色一级片视频 | 邵氏电影《金莲外传2》免费观看 | 熊猫电影yy8y全部免费观看 | 一级做a爱 | 日本人jizz| 美女激情av | 午夜伦理福利视频 | 日韩免费视频 | 欧美午夜精品久久久久久孕妇 | 青青草好吊色 | 久久久精品人妻一区二区三区 | 国产一区二区不卡在线 | 伊人一区| 欧美性受xxxx黑人xyx | 亚洲女同av | 日韩精品在线观看AV | 夜夜噜噜噜 | 亚洲综合av一区二区三区 | 中文字幕欧美视频 | 晨勃顶到尿h1v1 | 波多野结衣在线观看一区二区三区 | 日韩在线观看视频网站 | 黄色片日韩 | 五月天六月色 | 一区视频在线免费观看 | 探花国产| 一本色道久久综合精品婷婷 | 黄色在线免费播放 | 人妻少妇久久中文字幕 | 谁有免费的黄色网址 | 黄色一级视频片 | 欧美性天堂 | 免看黄大片aa | 中文字幕在线观看三区 | 国产成人三级在线观看 | 思思久久精品 | 欧美天堂在线 | 日本熟女一区二区 | 精品无码一区二区三区 | 久草影视在线 | 日本五十路在线 | 免费精品无码AV片在线观看黄 | 国产性猛交xxxx免费看久久 | 亚洲清纯国产 | 亚洲精品中文字幕在线播放 | 天天色综 | 亚洲av色香蕉一区二区三区 | 欧美国产日韩一区二区 | 亚洲另类春色 | 天天爱天天做天天爽 | 国产精品第六页 | 韩国日本美国免费毛片 | 欧美乱妇高清无乱码 | 91porny在线| 欧美性猛交ⅹ乱大交3 | 天天干夜夜看 | 亚洲一级精品 | 欧美日韩成人网 | 一区二区三区四区免费视频 |