如何在C#中将时间戳从24小时格式转换为12小时格式

本文关键字:格式 24小时 转换 12小时 时间戳 | 更新日期: 2023-09-27 18:20:22

我想将时间戳从at转换为12小时格式的24小时。这是我的代码,输出用大括号表示。

 date = Dyear + "" + Dmonth + "" + Dday + " " + strhour+""+strminute+""+"00"; (20130628 142900)
DateTime dt = new DateTime(Convert.ToInt32(Dyear), Convert.ToInt32(Dmonth), Convert.ToInt32(Dday), Convert.ToInt32(strhour), Convert.ToInt32(strminute), 00);(6/28/2013 2:29:00 PM)
TimeSpan ts = dt.Subtract(new DateTime(1970, 01, 01, 00, 00, 00));(15884.14:29:00)
String sTimeStamp = ts.TotalMilliseconds.ToString("0"); (1372429740000)

上述sTimeStamp将采用MM/DD/YYYY HH:MM:ttt格式(2013年6月28日19:59:000),如"1372429740"。我想以12小时格式显示时间戳,如MM/DD/YYYY hh:MM:ttt格式(2013年6月28日07:59:000),如"1372386540"

如何在C#中将时间戳从24小时格式转换为12小时格式

请记住,您所引用的格式只是用于显示目的。如果你想在计算中考虑到这一修改(用2代替14),就会出现12小时的滞后。

如果您只想显示2013年6月28日2:29:00,您可以使用以下字符串(计算的毫秒数不会受到影响):

string sTimeStamp = dt.ToString("MM/dd/yyyy hh:mm:ss tt");

如果您想要在时间计算期间执行此更改(不确定执行此更改的原因),则必须修改生成dt的方式(这一次,计算的毫秒将受到影响:相对于上述选项滞后12小时):

DateTime dt = new DateTime(Convert.ToInt32(Dyear), Convert.ToInt32(Dmonth), Convert.ToInt32(Dday), Convert.ToInt32(new DateTime(2000, 1, 1, Convert.ToInt32(strhour), 0, 0).ToString("hh:mm tt").Split(':')[0]), Convert.ToInt32(strminute), 0);

在第二种情况下,dt总是由于对输入值的"12h理解"而形成的;例如:如果strhour是2或14,它将占2(am)。

    internal static string ConvertTo_12_Format(string str)
    {
        //using system function
        DateTime dt = DateTime.ParseExact(str, "HH:mm", System.Globalization.CultureInfo.InvariantCulture);
        string s = dt.ToString("hh:mm");

        //using logic
        StringBuilder sb = new StringBuilder();
        int h1 = (int)str[0] - '0';
        int h2 = (int)str[1] - '0';
        string Meridien;
        int hh = h1 * 10 + h2;
        if (hh < 12)
        {
            Meridien = "AM";
        }
        else
            Meridien = "PM";
        hh %= 12;
        int c1 = (int)str[3] - '0';
        int c2 = (int)str[4] - '0';
        if (hh == 0)
        {
            sb.Append("12:");
            //18:30
            // Printing minutes and seconds 
            sb.Append(c1.ToString() + c2.ToString());
        }
        else
        {
            if(hh < 10)
            {
                sb.Append("0" + hh + ":");
                sb.Append(c1.ToString() + c2.ToString());
            }else
            {
                sb.Append(hh + ":");
                sb.Append(c1.ToString() + c2.ToString());
            }
        }
        sb.Append(" "+Meridien);
        return sb.ToString();
    }