我正在尝试将 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));
}
}
目前此代码适用于当前和不变的文化。
据我了解,您需要日期格式,例如“13/03/2023 12:35:21 PM”,因此您更改了代码中第二个条件的格式,例如“resultFormat = "MM-dd-yyyy hh:mm :ss tt";'到 'resultFormat = "dd-MM-yyyy hh:mm:ss tt";'.