簡體   English   中英

如何在C#中從字符串格式化DateTime / TimeSpan

[英]How to format DateTime / TimeSpan from String in C#

我收到的格式為“ 7:00 am-11:00 pm”的字符串表示開始和結束時間。 該字符串將始終有兩次。 現在,我需要將其格式化為今天的日期和時間,因此在上述情況下很容易。 時間是3月18日上午7點-3月18日上午11點,但是在極端情況下,時間就像“ 7:00 am-12:00 am”,在這種情況下,需要將其轉換為3月18日上午7點-19日3月12日上午。

現在,我可以使用if:D來解決這個問題。 因此,只要第二個令牌小於第一個令牌(例如“ 7:00 am-02:00 am”),我就可以增加第二部分的日期。

string input = "7:00 am - 12:00 am";
List<DateTime> tokens = input.Split('-').Select(x => DateTime.Parse(x.Trim(), CultureInfo.GetCultureInfo("en-NZ"))).ToList();
if(tokens[1] < tokens[0]){
    tokens[1] = tokens[1].AddDays(1);   
}

在此處輸入圖片說明

但是我想知道C#本身是否可以通過Timespan,Datetime類等任何內置方法來處理它。

該代碼適合您列出的要求,您可以考慮通過創建擴展方法並在if語句中使用DateTime.Hour來隱藏一些邏輯:

public static class StringExtensions
{
    public static IEnumerable<DateTime> ToDateTimePairs(this string input)
    {
        var dates = input.Split('-').Select(x => DateTime.Parse(x.Trim(), CultureInfo.GetCultureInfo("en-NZ"))).ToList();           

        if (dates[1].Hour < dates[0].Hour)
        {
            dates[1] = dates[1].AddDays(1);
        }

        return dates;
    }
}

您的代碼將變為:

string input = "7:00 am - 12:00 am";
var dates = input.ToDateTimePairs();
foreach(var date in dates)
{
    Console.WriteLine(date);
}
Console.ReadKey();

另外:您還可以在ToDateTimePairs()添加一些驗證步驟ToDateTimePairs()分割字符串后,您應該只有兩個有效的DateTime對象,等等)。 實現方式取決於您自己; 現在,如果字符串中包含無效的日期,則對DateTime.Parse()的調用將引發FormatException如果您想自己進行解析驗證,請考慮改用DateTime.TryParse()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM