代码之家  ›  专栏  ›  技术社区  ›  user584018

C:是否可以将24小时格式的字符串DateTime转换为12小时AM/PM日期格式(仅限字符串)

c#
  •  0
  • user584018  · 技术社区  · 6 年前

    我有一个C方法返回的日期/时间字符串,

    string dateTime = "2018-6-18 20:50:35"
    

    现在我想把它转换成另一个字符串表示,比如,

    string convertDT = "2018-6-18 08:50:35 PM"
    

    这可能吗?

    好像我能做点什么,

    var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
    

    但不起作用。请给我建议!

    6 回复  |  直到 6 年前
        1
  •  1
  •   maccettura    6 年前

    只需将字符串解析为一个新的datetime对象,然后调用 ToString() 使用正确的格式:

    string dateTime = "2018-6-18 20:50:35";
    DateTime parsedDateTime;
    if(DateTime.TryParse(dateTime, out parsedDateTime))
    {
        return parsedDateTime.ToString("yyyy-M-d hh:mm tt");
    }
    

    我的回答的好处是它包含了验证( DateTime.TryParse() ,这会导致多出几行代码,但现在您可以接受所有输入,而不必担心抛出异常。

    更好的方法是将此逻辑重构为可以重用的方法:

    public static bool TryChangeDateTimeFormat(string inputDateString, string outputFormat, out string outputDateString)
    {
        DateTime parsedDateTime;
        if(DateTime.TryParse(inputDateString, out parsedDateTime))
        {
            outputDateString = parsedDateTime.ToString(outputFormat);
            return true;
        }
        outputDateString = string.Empty;
        return false;
    }
    

    这将返回一个布尔值,说明转换是否成功,以及 out 变量将根据结果进行修改。

    小提琴 here

        2
  •  1
  •   SamiHuutoniemi    6 年前

    没有添加任何验证,

    var string24h = "2018-6-18 20:50:35";
    var dateTime = DateTime.Parse(string24h);
    var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
    
        3
  •  1
  •   Stand__Sure    6 年前

    使用 DateTime.ParseExact 然后 ToString

        4
  •  1
  •   Rufus L    6 年前

    当然,你可以用 DateTime 类解析原始字符串,然后为同一日期输出不同格式的字符串:

    string result = DateTime.Parse(dateTime).ToString("h:mm tt", CultureInfo.InvariantCulture);
    
        5
  •  1
  •   Viju    6 年前
    var dateTime = "2018-6-18 20:50:35";
    var dt = Convert.ToDateTime(dateTime);
    var amPmDateTime = dt.ToString(@"yyyy-MM-dd hh:mm:ss tt", CultureInfo.InvariantCulture);
    
        6
  •  1
  •   Stephanus DJ    6 年前

    为您提供您将使用的格式

    string convertDT = DateTime.Parse(dateTime).ToString("yyyy-MM-dd hh:mm:ss tt");
    

    您可以随意更改引号之间的格式。例如yyyy/mm/dd或其他。记住,mm是2个点,持续数月,mm是2个点,持续数分钟。

    所以如果你把

    string convertDT = DateTime.Parse(dateTime).ToString("yyyy-mm-dd hh:mm:ss tt");
    

    你会有一年几分钟几天的时间。