的Answer by Venkat是正確的,因爲是Answer by nvuono。但讓我們看看兩個問題:現代日期時間類和時區處理。
TL;博士
對於UTC ...
String now = Instant.now().truncatedTo(ChronoUnit.SECONDS).toString().replace("-" , "").replace(":" , "");
20160608T234748Z
對於本地時區(但留下曖昧省略偏移或時區)...
String now = LocalDateTime.now(ZoneId.of("America/Montreal")).truncatedTo(ChronoUnit.SECONDS).toString().replace("-" , "").replace(":" , "");
20160608T194748
對於包括本地時區偏移從-UTC ...
String now = OffsetDateTime.now(ZoneId.of("America/Montreal")).truncatedTo(ChronoUnit.SECONDS).toString().replace("-" , "").replace(":" , "");
20160608T194748-0700
詳細信息中顯示
的類問題和其他答案過時了。與最早版本的Java捆綁在一起的麻煩的舊日期時間類在Java 8中取代,後來由java.time框架取代。這些功能中的大部分都被移植到了ThreeTen-Backport中的Java 6中,並進一步適用於ThreeTenABP中的Android。
此外,時區未解決。
如果您希望使用UTC的當前時間,請使用Instant
。
Instant instant = Instant.now();
你想整秒,所以我們通過截斷整秒來設置小數秒。
Instant instant = Instant.now().truncatedTo(ChronoUnit.SECONDS);
的java.time類解析/生成表示日期時間值字符串時默認使用標準ISO 8601格式。該標準是按年份月份日期 - 小時 - 分鐘 - 秒的順序排列,按字母順序排序時會產生時間順序。
String output = instant.toString(); // 2016-06-08T23:47:48Z
示例輸出:2016-06-08T23:47:48Z
。因此需要替換各種操作系統上不同文件系統所允許的字符。 JonK的評論列出了其中的一些。正如nvuono所建議的,一種方法是消除所有標點符號。這種分隔符的最小化在ISO 8601中被稱爲基本版本,其中標準使用T
將年 - 月 - 日與小時 - 分鐘 - 秒分開。
達到該基本格式的一種方法是刪除插入完整版本的標點符號。
String output = instant.toString().replace("-" , "").replace(":" , "");
如果您願意,可以添加.replace("T" , "_")
。不使用複雜字體時,T
可能會使值更難讀取。有些人根本不使用分隔符,但是這使得難以辨別我的價值。
我建議你保留Z
,簡稱Zulu
這意味着UTC
。日期時間的含義是不明確的,沒有指示時區。
或定義您自己的格式模式。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddTHHmmssX"); // Or "yyyyMMdd_HHmmssX".
使用X
代碼在結束Z
追加如果與UTC工作。
Instant
類是java.time中的基本構建塊,不適用于格式化。轉換爲OffsetDateTime
以使用格式化程序。指定你想要的offset-from-UTC;這裏我通過常數ZoneOffset.UTC
使用UTC本身。
OffsetDateTime odt = OffsetDateTime.ofInstant(instant , ZoneOffset.UTC);
或者,使用簡便方法now
捕捉到當前時刻而無需通過Instant
去。請記住放棄秒數。
OffsetDateTime odt = OffsetDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.SECONDS);
的OffsetDateTime
是當你只是一個offset但不是一個完整的time zone。時區是一個偏移量加一組處理異常的規則,如Daylight Saving Time (DST)。如果您更喜歡在某些地區使用wall-clock time,請通過應用ZoneId
來調整爲時區,以獲得ZonedDateTime
。
ZoneId zoneId = ZoneId.of("America/Montreal");
ZonedDateTime zdt = ZonedDateTime.now(zoneId).truncatedTo(ChronoUnit.SECONDS);
toString
的方法上ZonedDateTime
既包括偏移從-UTC(ISO 8601標準的一部分),並且還附加在方括號中的時區的名稱(一個好主意,但不是標準)。如果您確實不想包含時區信息,請使用上面所示的DateTimeFormatter
。或者使用故意丟失所有時區信息的LocalDateTime
。
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDateTime ldt = LocalDateTime.now(zoneId).truncatedTo(ChronoUnit.SECONDS);
刪除有問題的字符:
String output = ldt.toString().replace("-" , "").replace(":" , "");
請張貼例外。 –
java.io.IOException:沒有這樣的文件或目錄 –
@DannySeaton更好地發佈額外的信息作爲編輯的問題,而不是作爲評論。 –