如何以我提供的相同格式解析日期时间字符串?

问题描述 投票:0回答:1

我正在尝试将 DateTime 字符串转换为自定义格式,当我使用 DateTime.tryParseExact() 方法时,但是我从该方法获得的日期时间对象已更改为另一种格式“MM/dd/yyy hh:mm:ss tt”无论我提供什么格式。我尝试了很多解决方案,但没有一个对我有用。 这是我的代码,


        public static DateTime ConvertToUserLocalTimeFormat(string strDateTime, string userTimeZone, string resultFormat)
        {
            if (string.IsNullOrEmpty(strDateTime))
                return DateTime.MinValue;

            if (String.IsNullOrWhiteSpace(resultFormat))
                resultFormat = "MM-dd-yyyy hh:mm:ss tt";

            var dateTime = Convert.ToDateTime(strDateTime);
            var newDateTime = ConvertToUserLocalDateTime(dateTime, userTimeZone);

            string dateStr = newDateTime.ToString(resultFormat);

            DateTime parsedDate;
            var dateParsed = DateTime.TryParseExact(dateStr, resultFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);
            if (dateParsed)
                return parsedDate;
            else
                return DateTime.MinValue;
        }

strDateTime 为“03/13/2023”,resultFormat 为“dd/MM/yyyy HH:mm:ss”,但 parsedDate 返回“3/13/2023 12:35:21 PM”

帮我解决这个问题

我尝试了 DateTime 对象的不同方法(Parse、tryparse、datetime.convert、tryparseExact)。

编辑: 如果我的上述代码不起作用,这就是我将格式转换为日期和时间格式的方式。

DateTimeFormatInfo formats = CultureInfo.CurrentCulture.DateTimeFormat;
var allFormat = formats.GetAllDateTimePatterns();

//string format = "dd/MM/yyyy HH:mm:ss tt";
//format = "D-M-y hh:mm";

foreach(var format in allFormat)
{
    var newLenght = 0;
    for (var i = 0; i <= format.Length - 1; i++)
    {
        if (format[i] == ':')
        {
            break;
        }
        if ((format[i] == 'd' || format[i] == 'M' || format[i] == 'y'))
        {
            newLenght = i + 1;
        }
    }

    Console.WriteLine(newLenght+" | "+ format.Substring(0, newLenght)+" | "+format);

    if(newLenght > 0)
    {
        Console.WriteLine(format.Substring(newLenght, format.Length - newLenght));
    }
}

目前此代码适用于当前和不变的文化。

c# datetime
1个回答
0
投票

据我了解,您需要日期格式,例如“13/03/2023 12:35:21 PM”,因此您更改了代码中第二个条件的格式,例如“resultFormat = "MM-dd-yyyy hh:mm :ss tt";'到 'resultFormat = "dd-MM-yyyy hh:mm:ss tt";'.

© www.soinside.com 2019 - 2024. All rights reserved.