簡體   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