C#:这可以将24小时格式的字符串日期时间转换为12小时AM / PM dateformat(仅限字符串)

时间:2018-06-18 16:05:44

标签: c#

我有一个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 个答案:

答案 0 :(得分:1)

不添加任何验证,

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

答案 1 :(得分:1)

使用DateTime.ParseExact然后ToString

答案 2 :(得分:1)

只需将字符串解析为新的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;
}

这将返回一个关于转换是否成功的bool,并且将根据结果修改out变量。

小提琴here

答案 3 :(得分:1)

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

string result = DateTime.Parse(dateTime).ToString("h:mm tt", CultureInfo.InvariantCulture);

答案 4 :(得分:1)

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);

答案 5 :(得分:1)

为了准确提供您使用的格式

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");

你将获得年 - 分 - 天。