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

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

C# TimeSpan 的 Golang time.duration 格式

C# TimeSpan 的 Golang time.duration 格式

Go
呼喚遠方 2022-10-24 15:19:49
我最近做了一些 Golang 并且非常喜歡time.duration的格式。例如,“ 1d2h3s ”。我找不到在 C# TimeSpan 類中使用這種格式的方法。有任何想法嗎?
查看完整描述

1 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

似乎不存在您在 Golang 上找到它的方式的格式化實現,但如果您更喜歡這種方式,我編寫了一個自定義方法來允許您:


public static class TimeSpanHelper

{

    private static List<(string Abbreviation, TimeSpan InitialTimeSpan)> timeSpanInfos = new List<(string Abbreviation, TimeSpan InitialTimeSpan)>

    {

            ("y", TimeSpan.FromDays(365)), // Year

            ("M", TimeSpan.FromDays(30)), // Month

            ("w", TimeSpan.FromDays(7)), // Week

            ("d", TimeSpan.FromDays(1)), // Day

            ("h", TimeSpan.FromHours(1)), // Hour

            ("m", TimeSpan.FromMinutes(1)), // Minute

            ("s", TimeSpan.FromSeconds(1)), // Second

            ("t", TimeSpan.FromTicks(1)) // Tick

    };


    public static TimeSpan ParseDuration(string format)

    {

        var result = timeSpanInfos

            .Where(timeSpanInfo => format.Contains(timeSpanInfo.Abbreviation))

            .Select(timeSpanInfo => timeSpanInfo.InitialTimeSpan * int.Parse(new Regex(@$"(\d+){timeSpanInfo.Abbreviation}").Match(format).Groups[1].Value))

            .Aggregate((accumulator, timeSpan) => accumulator + timeSpan);

        return result;

    }

}

您可以通過以下方式使用它:


var total = TimeSpanHelper.ParseDuration("1d2h3s");

請注意,有一些內置實現可以讓您獲得相同的結果:


該TimeSpan結構具有以下構造函數頭:


public TimeSpan(long ticks)


public TimeSpan(int hours, int minutes, int seconds)


public TimeSpan(int days, int hours, int minutes, int seconds)


public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds)

因此,我們可以通過以下方式 C#ify 您的示例:


var total = new TimeSpan(1, 2, 0, 3);

或者,我們可以在結構上使用一些靜態方法TimeSpan,允許我們輸入特定時間段的值:


public static TimeSpan FromDays(double value)


public static TimeSpan FromHours(double value)


public static TimeSpan FromMinutes(double value)


public static TimeSpan FromSeconds(double value)


public static TimeSpan FromMilliseconds(double value)


public static TimeSpan FromTicks(long value)

所以我們也可以這樣做:


var total = TimeSpan.FromDays(1) + TimeSpan.FromHours(2) + TimeSpan.FromSeconds(3);


查看完整回答
反對 回復 2022-10-24
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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