1 回答

TA貢獻1780條經(jīng)驗 獲得超5個贊
似乎不存在您在 Golang 上找到它的方式的格式化實現(xiàn),但如果您更喜歡這種方式,我編寫了一個自定義方法來允許您:
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");
請注意,有一些內(nèi)置實現(xiàn)可以讓您獲得相同的結(jié)果:
該TimeSpan結(jié)構(gòu)具有以下構(gòu)造函數(shù)頭:
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);
或者,我們可以在結(jié)構(gòu)上使用一些靜態(tài)方法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);
- 1 回答
- 0 關(guān)注
- 100 瀏覽
添加回答
舉報