繁体   English   中英

将12小时时间格式转换为24小时整数?

[英]Convert 12-hour time format to 24 hour integer?

在我的应用程序中,我有一个下拉框的字符串,显示12小时内可供用户选择的小时数。 可能的值是:

9am
10am
11am
12pm
1pm
2pm
3pm
4pm
5pm

什么代码会将其中一个字符串转换为24小时整数? 例如, 10am应转换为104pm应转换为16

您可以使用DateTime.Parse(...)获取DateTime值,然后引用结果的.Hour属性;

int h = DateTime.Parse("10am").Hour;   // == 10
int h2 = DateTime.Parse("10pm").Hour;  // == 22

DateTime.Parse在它允许的内容中相当自由,但显然在内部做出了一些假设。 例如,在上面的代码中, DateTime.Parse("10am")在当前时区的当前日期返回上午10点(我认为......)。 因此,请注意使用API​​的上下文。

如果您有一个下拉列表,为什么不将值设置为您想要的整数值:

<asp:DropDownList runat="server" ID="hours">
    <asp:ListItem Value="9">9am</asp:ListItem>
    <asp:ListItem Value="10">10am</asp:ListItem>
    <!-- etc. -->
    <asp:ListItem Value="17">5pm</asp:ListItem>
</asp:DropDownList>

考虑到时间是连续的,您可以简化逻辑:

var firstHourStr = box.Items[0].ToString();
var firstHour = int.Parse(firstHourStr.Replace("am", "").Replace("pm", ""));

if (firstHourStr.Contains("pm"))
{
    firstHour += 12;
}

var selectedHour = firstHour + box.SelectedIndex;

如果小时是静态的,并且您知道第一个小时,则可以使用const并使用var selectedHour = FIRST_HOUR + box.SelectedIndex简化该过程。

此外,我假设问题中显示的有效格式。

最后的注意事项:你需要处理导致问题的12pm情况,因为12小时的性质是“am”之后的一秒钟。

您可以使用DateTime.Parse ,但这不能很好地与国际化。

int hour = DateTime.Parse(stringValue).Hour;

相反,只需在ComboBox使用DateTime对象并使用FormatString格式化它们:

// In Constructor:
cbHours.Items.Add(new DateTime(2000, 1, 1, 8, 0, 0));
cbHours.Items.Add(new DateTime(2000, 1, 1, 10, 0, 0));
cbHours.Items.Add(new DateTime(2000, 1, 1, 13, 0, 0));
cbHours.FormatString = "h tt";

// In event handler
if (cbHours.SelectedIndex >= 0)
{
    int hour = ((DateTime)cbHours.SelectedItem).Hour
    // do things with the hour
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM