c# - 如何将 2d30m 这样的字符串格式更改为时间跨度?

标签 c# asp.net .net datetime timespan

我不知道这种格式在编程语言中叫什么,比如2d30m。但是,我看到一些 Jquery 插件或 Youtube 的跳转到时间 url,例如 &t=3m11s 使用这种时间格式。很难用谷歌搜索,因为我不知道 excat 关键字。

所以,我想使用这种格式并翻译成C#中的TimeSpan对象。我怎样才能实现这个目标?

现在我正在尝试通过此代码从字符串中提取值

public static void Main()
{
    String str = "2d30m";
    int day = 0, minute = 0;
    //Get Day
    day = Helper(str, "d");
    //Get Minute
    minute = Helper(str, "m");
    //Create timespan
    var myTimeSpan = new TimeSpan(days: day, hours: 0, minutes: minute, seconds: 0);
    Console.Write(myTimeSpan);
}

public static int Helper(string input, string timeCode)
{
    int output = 0;
    int indexOf = input.LastIndexOf(timeCode, StringComparison.OrdinalIgnoreCase);
    if (indexOf > 0)
    {
        string strTime = input.Substring(Math.Max(0, indexOf - 2), 2);
        Console.WriteLine(strTime);
        strTime = System.Text.RegularExpressions.Regex.Replace(strTime, "[^0-9.]", ""); // remove all alphabet
        output = Convert.ToInt32(strTime);
    }

    return output;
}

最佳答案

您可以使用TimeSpan.ParseExact:

var str = "2d30m";
// d matches both 1 and 2 digit days
// \d means literal "d"
// m matches both 1 and 2 digit minutes
// \m is literal "m"
var timeSpan = TimeSpan.ParseExact(str, @"d\dm\m", CultureInfo.InvariantCulture);

关于c# - 如何将 2d30m 这样的字符串格式更改为时间跨度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44878406/

相关文章:

c# - Foreach thread.join,没有按预期工作,如何解决?

c# - 在 ASP.NET MVC3 中使用 C# 填充 Word 模板

asp.net - 在 ASP.NET 站点中混合 .Net 2.0 和 .Net 4.0

javascript - 没有列表的组单选按钮

.net - 使 resharper 忽略特定项目的代码建议

javascript - 使用 SSL 运行的应用程序在第一次访问时未加载所有脚本/CSS

.net - 我可以使用 WinForms VB.NET 应用程序访问中央服务器上的数据库吗?

c# - 有人可以向我解释一下这个 LINQ/Entity Framework 查询实际上是如何工作的吗?

c# - 如何将 int 转换为 enum 而不是使用 switch

c# - 不在 sportsstore asp.net mvc 5 中实现接口(interface)