3 回答

TA貢獻1831條經驗 獲得超10個贊
我不知道您的最終目標是實際生成一個刪除了秒組件的日期對象,還是只想更改時間戳的表示形式以刪除秒組件。對于后一種要求,一個簡單的正則表達式替換可以在這里工作:
String str = "Mon, 18 Mar 2019 03:43:55 GMT";
str = str.replaceAll("(?<=\\d):\\d{2}(?=\\s)", "");
System.out.println(str);
Mon, 18 Mar 2019 03:43 GMT

TA貢獻1895條經驗 獲得超7個贊
這應該適用于此示例;我不知道你是否想要任何時間戳的通用版本 - 這是可能的,但有點復雜。
Main() {
//assume that timestamp reply from the API is being stored in 'str'
//now we've to remove :55 from str
String str = "Mon, 18 Mar 2019 03:43:55 GMT";
str = str.replace(":55", "");
Date date=null;
try {
date=new SimpleDateFormat("EEE, dd MMM yyyy HH:mm z").parse(str);
}
catch (ParseException e) {
e.printStackTrace();
}
}

TA貢獻1856條經驗 獲得超5個贊
java.time 和一個正確的 datetime 對象,而不是一個字符串
在程序內部,不要將時間點表示為字符串。使用正確的日期時間對象。解析字符串以獲取一個:
String str = "Mon, 18 Mar 2019 03:43:55 GMT";
// Parse for internal use
Instant when = DateTimeFormatter.RFC_1123_DATE_TIME.parse(str, Instant::from);
System.out.println(when);
2019-03-18T03:43:55Z
您從API獲得的字符串采用標準的RFC 1123 / RFC 822格式(包括秒,并且它們接受不違反標準是正確的(盡管ISO 8601格式可能更合適))。RFC 1123 / RFC 822格式的解析器內置于java.time中,使我們不必從格式模式字符串中自行構建它。
我假設時間點是這里的重要信息,并丟棄了它在GMT中傳輸的信息(在問題中的代碼中也發生了同樣的事情)。如果偏移量值得保留,我們需要 一個 而不是 一個 ,并且相同的內置格式化程序仍然有效:OffsetDateTimeInstant
OffsetDateTime whenWithOffset
= OffsetDateTime.parse(str, DateTimeFormatter.RFC_1123_DATE_TIME);
System.out.println(whenWithOffset);
2019-03-18T03:43:55Z
輸出中的尾隨表示 UTC,這實際上與 GMT 相同(理論差異小于一秒)。Z
我建議你問的秒數不會對你的程序造成任何傷害。我假設您只想避免將它們呈現給您的用戶。如果我錯了,當您知道如何操作時,刪除秒很容易:
Instant when = DateTimeFormatter.RFC_1123_DATE_TIME.parse(str, Instant::from)
.truncatedTo(ChronoUnit.MINUTES);
2019-03-18T03:43:00Z
現在秒數設置為 0。 可以以與 .truncatedToOffsetDateTime
以用戶的時區和區域設置呈現給用戶,無需幾秒鐘
我建議你的用戶希望在他或她自己的時區中以他或她的文化中習慣的格式查看沒有秒的日期和時間。例如:
DateTimeFormatter formatter
= DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.forLanguageTag("en-IN"));
ZonedDateTime whenInUsersTimeZone = when.atZone(ZoneId.of("Asia/Kolkata"));
String formatted = whenInUsersTimeZone.format(formatter);
System.out.println(formatted);
2019/03/18 上午9:13
您注意到:
時間已從 03:43 (GMT) 轉換為 09:13 (印度標準時間)。
即使程序中的時間包含秒,也不會顯示它們。
如果你想使用JVM的默認格式語言環境,請使用(省略這部分也完全有效,但我更喜歡明確我們依賴于默認值)。如果要使用默認時區,請使用 。.withLocale(Locale.getDefault(Locale.Category.FORMAT))when.atZone(ZoneId.systemDefault())
避免日期和簡單日期格式
您使用的日期時間類 和 的設計很差,而且早已過時。相反,我使用的是java.time,即現代Java日期和時間API。我發現使用它要好得多。DateSimpleDateFormat
添加回答
舉報