将 12 小时时间转换为时间跨度 C#
Convert 12 hour time to Timespan C#
使用 ASP.NET 表单时,我遇到了将 12 小时时间转换为时间跨度的问题。下面我将 DateTime 与 TimeSpan 结合起来,因为用户选择一个日期,然后选择一个时间。这些字段由 javascript.
控制
DateTime DateResult = DateTime.TryParse(txtDate.Text, out DateResult) ? DateResult : DateTime.Today;
TimeSpan TimeResult = TimeSpan.TryParseExact(txtTime.Text, "h:mm tt", CultureInfo.InvariantCulture, out TimeResult) ? TimeResult : new TimeSpan();
DateResult = DateResult.Add(TimeResult)
所以解析日期工作正常,但 Timespan 不行。一个例子:
输入日期:2018 年 8 月 3 日
输入时间:3:00上午
值可以通过,但时间失败,因此 DateResult 变为“08/03/2018 00:00”而不是“08/03/2018 03:00”。我也尝试过使用 TimeSpan.TryParse 方法,但没有成功。
我还通过在后台手动输入数据库中的时间来确保格式正确。 gridview 有一列以这种格式 "dd/MM/yyyy h:mm tt" 显示完整日期,并且有效。
有人可以分享一些光吗?理想情况下,我想避免使用任何第三方插件。
请参阅 ParseExact 或 https://msdn.microsoft.com/en-us/library/system.timespan.tryparseexact(v=vs.110).aspx 了解 TryParseExact 应该适用于 DateTime 和 TimeSpan 等等
仅供参考,它被称为子午线,另请参阅 AM/PM to TimeSpan
一起解析它们
最简单的方法是在解析为单个日期时间之前连接字符串,例如
var dateEntered = @"08/03/2018";
var timeEntered = @"3:00 am";
DateTime result;
var completeDateString = dateEntered + " " + timeEntered;
var ok = DateTime.TryParse(completeDateString, out result);
if (!ok) result = DateTime.Today;
Console.WriteLine(result);
输出:
8/3/2018 3:00:00 AM
他哒
如果你必须单独解析它们
如果您想单独使用这些字段,您仍然可以(我想如果您希望时间格式准确但日期部分灵活,我想您必须这样做在你的例子中)。但是TimeSpan.TryParseExact和DateTime.Parse真的不一样。 format codes 不同;它不支持“:”字符(除了带有转义符的文字,例如 "\:"
),或者 "tt" 格式说明符。我猜 am/pm 的概念与绝对时间点有关,而不是相对时间偏移量,因此未提供。但是您仍然可以将文本框解析为 DateTime 并使用其时间部分。
您可以稍微缩短一下,但此示例提供了您需要的一切:
static public DateTime ParseDateTime(string input)
{
DateTime output;
var ok = DateTime.TryParse(input, out output);
if (ok) return output;
return DateTime.Today;
}
static public TimeSpan ParseTime(string input)
{
DateTime output;
var ok = DateTime.TryParseExact(input, @"h:mm tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out output);
return output.Subtract(output.Date);
}
public static void Main()
{
var dateEntered = @"08/03/2018";
var timeEntered = @"3:00 am";
DateTime dateResult = ParseDateTime(dateEntered);
TimeSpan timeResult = ParseTime(timeEntered);
DateTime finalResult = dateResult.Add(timeResult);
Console.WriteLine(finalResult);
}
输出:
8/3/2018 3:00:00 AM
使用 ASP.NET 表单时,我遇到了将 12 小时时间转换为时间跨度的问题。下面我将 DateTime 与 TimeSpan 结合起来,因为用户选择一个日期,然后选择一个时间。这些字段由 javascript.
控制DateTime DateResult = DateTime.TryParse(txtDate.Text, out DateResult) ? DateResult : DateTime.Today;
TimeSpan TimeResult = TimeSpan.TryParseExact(txtTime.Text, "h:mm tt", CultureInfo.InvariantCulture, out TimeResult) ? TimeResult : new TimeSpan();
DateResult = DateResult.Add(TimeResult)
所以解析日期工作正常,但 Timespan 不行。一个例子:
输入日期:2018 年 8 月 3 日
输入时间:3:00上午
值可以通过,但时间失败,因此 DateResult 变为“08/03/2018 00:00”而不是“08/03/2018 03:00”。我也尝试过使用 TimeSpan.TryParse 方法,但没有成功。
我还通过在后台手动输入数据库中的时间来确保格式正确。 gridview 有一列以这种格式 "dd/MM/yyyy h:mm tt" 显示完整日期,并且有效。
有人可以分享一些光吗?理想情况下,我想避免使用任何第三方插件。
请参阅 ParseExact 或 https://msdn.microsoft.com/en-us/library/system.timespan.tryparseexact(v=vs.110).aspx 了解 TryParseExact 应该适用于 DateTime 和 TimeSpan 等等
仅供参考,它被称为子午线,另请参阅 AM/PM to TimeSpan
一起解析它们
最简单的方法是在解析为单个日期时间之前连接字符串,例如
var dateEntered = @"08/03/2018";
var timeEntered = @"3:00 am";
DateTime result;
var completeDateString = dateEntered + " " + timeEntered;
var ok = DateTime.TryParse(completeDateString, out result);
if (!ok) result = DateTime.Today;
Console.WriteLine(result);
输出:
8/3/2018 3:00:00 AM
他哒
如果你必须单独解析它们
如果您想单独使用这些字段,您仍然可以(我想如果您希望时间格式准确但日期部分灵活,我想您必须这样做在你的例子中)。但是TimeSpan.TryParseExact和DateTime.Parse真的不一样。 format codes 不同;它不支持“:”字符(除了带有转义符的文字,例如 "\:"
),或者 "tt" 格式说明符。我猜 am/pm 的概念与绝对时间点有关,而不是相对时间偏移量,因此未提供。但是您仍然可以将文本框解析为 DateTime 并使用其时间部分。
您可以稍微缩短一下,但此示例提供了您需要的一切:
static public DateTime ParseDateTime(string input)
{
DateTime output;
var ok = DateTime.TryParse(input, out output);
if (ok) return output;
return DateTime.Today;
}
static public TimeSpan ParseTime(string input)
{
DateTime output;
var ok = DateTime.TryParseExact(input, @"h:mm tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out output);
return output.Subtract(output.Date);
}
public static void Main()
{
var dateEntered = @"08/03/2018";
var timeEntered = @"3:00 am";
DateTime dateResult = ParseDateTime(dateEntered);
TimeSpan timeResult = ParseTime(timeEntered);
DateTime finalResult = dateResult.Add(timeResult);
Console.WriteLine(finalResult);
}
输出:
8/3/2018 3:00:00 AM