日期时间格式问题:字符串未被识别为有效的日期时间

12

我想在C#中将输入字符串格式化为 MM/dd/yyyy hh:mm:ss 格式。
输入的字符串格式为MM/dd/yyyy hh:mm:ss
例如:"04/30/2013 23:00"

我尝试了Convert.ToDateTime()函数,但它会将4视为日期,而将3视为月份,这不是我想要的。实际上,月份是04,日期是03。

我也尝试了DateTime.ParseExact()函数,但是出现异常。

我收到以下错误:

  

无法将字符串识别为有效的 DateTime。


2
你能否发布你遇到问题的实际源代码? - tafa
你是怎么尝试使用 ParseExact 的?我猜你在传递格式时漏掉了一些东西,简单猜测应该是使用 HH 而不是 hh,因为你使用的是24小时制。 - V4Vendetta
你在使用日期选择器吗? - Chetan Sanghani
@PranayRana 我在想哪个答案会先获得赞 :) 或者它们会吗? :) - Soner Gönül
@SonerGönül - 无论如何,重点是楼主必须接受正确的答案... - Pranay Rana
其实我一直在尝试使用格式 MM/dd/yyyy hh:mm:ss。但是我的输入字符串中没有包含 ss 部分,这就是错误的原因。不管怎样,谢谢大家。 :) - Priya
9个回答

16

你的日期时间字符串中不包含秒数。你需要在格式中反映这一点(删除:ss)。
另外,如果你使用24小时制的时间,你需要指定H而不是h

DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

更多信息请参见:

自定义日期和时间格式字符串


str = "6"; dtm = DateTime.ParseExact(str, "d", CultureInfo.InvariantCulture); 对我来说失败了。有什么想法吗? - Si8
@Si8 这是因为 "d" 是一个标准的格式字符串(短日期)。你可以使用 "%d" 代替。请参考这里:https://msdn.microsoft.com/zh-cn/library/8kb3ddd4(v=vs.110).aspx#UsingSingleSpecifiers - Botz3000

5
你可以使用 DateTime.ParseExact() 方法。

使用指定的格式和特定于区域性的格式信息,将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。 字符串表示形式的格式必须与指定的格式完全匹配。

DateTime date = DateTime.ParseExact("04/30/2013 23:00", 
                                    "MM/dd/yyyy HH:mm", 
                                    CultureInfo.InvariantCulture);

这里有一个演示

hh代表12小时制,范围从01到12,HH代表24小时制,范围从00到23。

更多信息,请查看自定义日期和时间格式字符串


3

试试这个:

string strTime = "04/30/2013 23:00";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "MM/dd/yyyy HH:mm",  
   System.Globalization.CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, out dtTime))
 {
    Console.WriteLine(dtTime);
 }

2
这也可能是问题所在,如果你的字符串是6/15/2019。DateTime Parse期望它是06/15/2019。因此,请首先按斜杠分割它。Original Answer翻译成"最初的回答"。
var dateParts = "6/15/2019"
var month = dateParts[0].PadLeft(2, '0');
var day = dateParts[1].PadLeft(2, '0');
var year = dateParts[2] 


var properFormat = month + "/" +day +"/" + year;

现在你可以使用DateTime.Parse(properFormat, "MM/dd/yyyy")。很奇怪,但这是唯一对我有效的方法。

注:Original Answer翻译成"最初的回答"

1
DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",  
                                           CultureInfo.InvariantCulture);

请注意使用 HH(24 小时制)而不是 hh(12 小时制),并使用 InvariantCulture,因为某些文化使用斜杠以外的分隔符。
例如,如果文化是 de-DE,则格式“dd/MM/yyyy”将期望句点作为分隔符(31.01.2011)。

1

0

以下代码对我有效:

string _stDate = Convert.ToDateTime(DateTime.Today.AddMonths(-12)).ToString("MM/dd/yyyy");
String format ="MM/dd/yyyy";
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
DateTime _Startdate = DateTime.ParseExact(_stDate, format, culture);

0

您可以使用此类型格式(从SQL Server获取格式化数据)


FORMAT(convert(datetime,'16/04/2018 10:52:20',103),'dd/MM/yyyy HH:mm:ss', 'en-us')

格式化(convert(datetime,'16/04/2018 10:52:20',103),'dd/MM/yyyy HH:mm:ss', 'en-us')


CONVERT(VARCHAR,convert(datetime,'16/04/2018 10:52:20',103), 120)


0
我创建了一个扩展方法,每次都会使用它。
    public static DateTime? ToDateTime(this string dateTime)
    {
        if (string.IsNullOrEmpty(dateTime))
        {
            return null;
        }

        return DateTimeOffset.ParseExact(dateTime, new string[] { "MMM dd, yyyy", "dd/MM/yyyy", "d/M/yyyy", "dd-MM-yyyy", "d-M-yyyy", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-dd" }, CultureInfo.InvariantCulture).DateTime;
    }

我在一个数组中添加了多种日期格式,并且每次都会重复使用这个方法。上述方法适用于以下日期示例:
- May 23, 2022 - 5-08-2023 - 05-08-2023 - 5/08/2023 - 05/08/2023 - 2023-02-01 - 2023-02-01T12:23:99Z
此外,在C#中,也可以尝试使用@Manjay的答案。
    char formatChar = '-';
    if (dateTime.Contains('-'))
    {
        formatChar = '-';
    }

    if (dateTime.Contains('/'))
    {
        formatChar = '/';
    }

    string[] parts = dateTime.Split(formatChar);
    var month = parts[0].PadLeft(2, '0');
    var day = parts[1].PadLeft(2, '0');
    var year = parts[2];
    string properFormattedDate = $"{month}{formatChar}{day}{formatChar}{year}";

    return DateTimeOffset.ParseExact(properFormattedDate, new string[] { "MMM dd, yyyy", "dd/MM/yyyy", "dd-MM-yyyy", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-dd" }, CultureInfo.InvariantCulture).DateTime;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接