将数据库24小时转换为12小时制

时间:2015-10-05 19:43:48

标签: c# datetime

我正在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';
    }

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

4 个答案:

答案 0 :(得分:3)

我只想清楚这一点。在.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以特定格式编写一个字符串。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

上面的格式字符串h是1位或2位数的12小时工作小时部分,mm是分钟,tt是大写AM }或PM值。如果你想将它分解成MVC页面,你可以这样做:

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

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

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

答案 3 :(得分:0)

您可以比较值是否更大

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

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

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

编辑以反映下面的真相。