亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 java 從 API 回復中刪除秒數

使用 java 從 API 回復中刪除秒數

拉莫斯之舞 2022-08-17 12:25:02
在下面的代碼中。字符串 str;是來自 API 的回復。所以我不能改變它。但我想從中刪除秒部分。否則,我必須每秒向該API發送一個請求,以保持我的時間小部件更新。如果有任何參數可以獲取特定格式的時間戳,我還聯系了API開發人員。他們說不。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";    Date date=null;    try {        date=new SimpleDateFormat("EEE, dd MMM yyyy HH:mm z").parse(str);    }     catch (ParseException e) {        e.printStackTrace();    }}獲取異常:無法解析的日期java.text.ParseException: Unparseable date: "Mon, 18 Mar 2019 03:43:55 GMT"at java.text.DateFormat.parse(Unknown Source)at Main.<init>(Main.java:9)at Main.main(Main.java:17)API 的支持團隊回復:這并不是一個關于地理編碼的問題,但有兩種方法可以解析日期。1. 使用正則表達式。2.您可能已經注意到在“時間戳”部分中還有一個包含unixtime created_unix。我不知道你使用的是哪種編程語言,但我確信有標準模塊可以將unixtime轉換為您想要的任何格式
查看完整描述

3 回答

?
慕哥6287543

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


查看完整回答
反對 回復 2022-08-17
?
人到中年有點甜

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();

    }

}


查看完整回答
反對 回復 2022-08-17
?
RISEBY

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


查看完整回答
反對 回復 2022-08-17
  • 3 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號