如何在 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 - 12:00 am”,在这种情况下,它需要转换为 3 月 18 日早上 7 点- 3 月 19 日中午 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()
中添加一些验证步骤(拆分字符串后,您应该只有两个有效的 DateTime
对象,等等)。你实现它的方式取决于你;现在,如果字符串中包含无效日期,对 DateTime.Parse()
的调用将抛出 FormatException
- 如果您想自己处理解析验证,请考虑使用 DateTime.TryParse()
相反。
我收到一个格式为“7:00 am - 11:00 pm”的字符串,表示开始和结束时间。 字符串总是有两次。现在我需要将其格式化为今天的日期和时间,因此在上述情况下很容易。现在是 3 月 18 日早上 7 点 - 3 月 18 日晚上 11 点,但有一个边缘情况,时间就像“早上 7:00 - 12:00 am”,在这种情况下,它需要转换为 3 月 18 日早上 7 点- 3 月 19 日中午 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()
中添加一些验证步骤(拆分字符串后,您应该只有两个有效的 DateTime
对象,等等)。你实现它的方式取决于你;现在,如果字符串中包含无效日期,对 DateTime.Parse()
的调用将抛出 FormatException
- 如果您想自己处理解析验证,请考虑使用 DateTime.TryParse()
相反。