首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 將秒數轉換為中文可讀時間格式(年月日時分秒)

     編輯:Java 相關知識

在業務開發中,常需將持續秒數轉換為「X年Y月Z日...」這類人類可讀格式。本文提供一個輕量級工具方法,支援從秒到年級的完整轉換,適合任務倒計時、運行時長顯示等場景。

實現邏輯

採用逐級取模除法:從秒開始,依次計算秒、分、時、天、月、年。為簡化計算,假設每月 30 天、每年 12 個月(非精確曆法,但滿足相對時長展示需求)。

代碼實現

/**
 * 將秒數轉換為中文時長字符串
 * @param totalSeconds 總秒數(>0 表示未來,<=0 返回「立刻」)
 * @return 格式如「1年又2個月3天4小時5分6秒」
 */
public static String formatDurationChinese(long totalSeconds) {
    if (totalSeconds <= 0) {
        return "立刻";
    }
    long t = totalSeconds;
    long seconds = t % 60; t /= 60;
    long minutes = t % 60; t /= 60;
    long hours   = t % 24; t /= 24;
    long days    = t % 30; t /= 30;
    long months  = t % 12; t /= 12;
    long years   = t;

    StringBuilder sb = new StringBuilder();
    if (years > 0)   sb.append(years).append("年又");
    if (months > 0)  sb.append(months).append("個月");
    if (days > 0)    sb.append(days).append("天");
    if (hours > 0)   sb.append(hours).append("小時");
    if (minutes > 0) sb.append(minutes).append("分");
    if (seconds > 0) sb.append(seconds).append("秒");
    return sb.toString();
}

使用示例

System.out.println(formatDurationChinese(0));           // 立刻
System.out.println(formatDurationChinese(45));          // 45秒
System.out.println(formatDurationChinese(3661));        // 1小時1分1秒
System.out.println(formatDurationChinese(90061));       // 1天1小時1分1秒
System.out.println(formatDurationChinese(3600L*24*30*12 + 3600)); // 1年又1小時

注意事項與擴展

  • 精度說明:按固定 30 天/月、12 月/年計算,非真實曆法。如需精確日期差,請使用 java.time.Period 或 ChronoUnit。
  • 輸入單位:參數為秒。若為毫秒,先除以 1000 再調用。
  • 零值處理:各單位為 0 時不輸出,避免「0天」等冗餘。
  • 國際化:若需多語言,可將單位字符串提取至資源文件。

進階版:支援精確曆法(Java 8+)

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;

public static String formatDurationExact(long seconds) {
    if (seconds <= 0) return "立刻";
    LocalDateTime start = LocalDateTime.now();
    LocalDateTime end = start.plusSeconds(seconds);
    Period period = Period.between(start.toLocalDate(), end.toLocalDate());
    Duration duration = Duration.between(start.toLocalTime(), end.toLocalTime());
    // 組合 period 與 duration 輸出...
}

精確版利用 java.time 計算真實年月日差,適合對精度要求高的場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved