【问题标题】:Converting the database 24 hr clock to 12 hr clock [duplicate]将数据库 24 小时制时钟转换为 12 小时制时钟 [重复]
【发布时间】:2015-10-05 19:43:48
【问题描述】:

我正在用 MVP 编写一个 Web 应用程序。 我遇到的一个问题是,我不确定如何将数据库中的 24 小时制转换为网页上的 12 小时制。 想法是这样的:用户以 12 小时制输入时间,但数据库将其保存为 24 小时制。当用户点击一条记录时,数据库中的时间应该在 12 小时后转换回来,并显示在网页上。 共有三个下拉框(小时、分钟、上午/下午)。我有 12 小时时钟到 24 小时时钟部分。任何人都可以帮我处理 24 小时到 12 小时的时钟部分吗? 我不知道如何将 20:00:00 返回到 8:00 PM,并将每个值设置为三个下拉框。 这是我当前的代码:

 public string sunOpenTime
    {
        get //Convert 12hr clock to 24 clock
        {
            int hours = 0;
            int mins = 0;
            hours = Convert.ToInt32(ddlSundayOpenTimeHr.Text);
            mins = Convert.ToInt32(ddlSundayOpenTimeMin.Text);
            TimeSpan ts;
            if (ddlSundayFrom.SelectedValue == "PM")
            {
                ts = new TimeSpan(hours + 12, mins, 0);
            }

            else
            {
                ts = new TimeSpan(hours, mins, 0);
            }
            return ts.ToString();
        }

        set // Not really sure what to do here
        {
            sunOpenTime = value; //SunOpenTime is made by two parts: ddlSundayOpenTimeHr.Text + ddlSundayOpenTimeMin.Text;
        }
    }

对于 AM/PM 下拉菜单:

public string ddSundayFrom
    {
        if ... // something should be added here to decide if the value is PM or AM
        ddSundayFrom = 'PM';
        else
        ddSundayFrom = 'AM';
    }

任何帮助或想法将不胜感激。非常感谢!

【问题讨论】:

标签: c# datetime


【解决方案1】:

我只是想澄清一下。在 .NET 中,DateTime 表示时间的瞬间。它以一种特定的方式存储在内存中,而为用户提供服务的用户界面可以以多种不同的方式显示它。就像有人问你时间一样,你可能会对他们说“现在是 1400 小时”,或者你可能会说“现在是下午 2 点”,或者你可能会说“现在是 3 点后一刻钟”。你可以用多种不同的方式回答这个问题。

同样,您的用户界面可以采用 DateTime 结构并以多种不同方式显示它:

DateTime myDate = new DateTime(2015, 10, 5, 17, 30, 00);
string twelveHour = myDate.ToString("h:mm tt"); // 5:30 PM
string twentyFourHour = myDate.ToString("HH:mm"); // 17:30

您可以查看更多示例here。但是,要摆脱这一点的是,您没有“转换” DateTime 结构。您正在做的是根据 DateTime 以特定格式组成一个字符串。

【讨论】:

    【解决方案2】:

    使用DateTime structure。其他人已经要求类似的东西here :)

    【讨论】:

      【解决方案3】:

      如果时间值在数据库中存储为timedatedatetime,您可以将其读入DateTime 并使用字符串格式确定其显示方式。

      string timeStr = timevalue.ToString("h:mm tt");
      

      在上面的格式字符串中,h 是 1 位或 2 位的 12 小时时间小时部分,mm 是分钟,tt 是大写的 AMPM 值。如果您想将其分解为您的 MVC 页面,您可以这样做:

      string[] timeParts = timevalue.ToString("h:mm tt").Split(':', ' ').ToArray();
      

      这将为您提供一个包含三个部分的数组:小时、分钟和AM/PM。然后可以将它们加载到 Web 表单的适当部分。

      比自己做数字体操要简单得多。

      【讨论】:

        【解决方案4】:

        你可以比较一个值是否更大

        String meridiem = (hours > 0 && hours < 13) ? "AM" : "PM";
        

        然后使用模运算符找出12小时时间:

        int hours12 = (hours > 0 && hours < 13) ? hours % 13 : hours - 12;
        

        编辑以反映以下事实。

        【讨论】:

        • 这里的问题是 000 小时是凌晨 12 点。
        • 我想我已经修好了,但仍然不确定。 :(
        • 不行,现在hours为0时hours12为-12。你只需要处理0、1-12和13-23这3种情况。
        • 嗯,是的,你可以有 24:00 和 0:00,但只有 0:01,等等..grrrrr..
        • 最好假设 24:00 是不可能的。不知道在什么场景下。但无论哪种方式,这都会起作用int hours12 = hours == 0 ? 12 : (hours &gt; 12 ? hours -12 : hours);
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 2017-03-25
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        相关资源
        最近更新 更多