Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析";“字符串”;至;日期时间“;加上;A.m、 ";或;Pm、 ";格式(不是上午/下午)?_C#_.net_Datetime - Fatal编程技术网

C# 如何解析";“字符串”;至;日期时间“;加上;A.m、 ";或;Pm、 ";格式(不是上午/下午)?

C# 如何解析";“字符串”;至;日期时间“;加上;A.m、 ";或;Pm、 ";格式(不是上午/下午)?,c#,.net,datetime,C#,.net,Datetime,我需要使用函数DateTime.ParseExact()将此DateTime字符串(“6/12/2018 12:00:03 a.m.”)转换为DateTime类型 我使用此选项转换了字符串,它可以工作: var date = "6/01/2018 12:00:03 a. m."; var x=Convert.ToDateTime(date); 此外,我还能够使用DateTime.ParseExact()转换此字符串(“6/12/2018 12:00:03”),但当日期不包含指示符a时。m、

我需要使用函数
DateTime.ParseExact()
将此
DateTime
字符串(
“6/12/2018 12:00:03 a.m.”
)转换为
DateTime
类型

我使用此选项转换了
字符串
,它可以工作:

var date = "6/01/2018  12:00:03 a. m.";
var x=Convert.ToDateTime(date);
此外,我还能够使用
DateTime.ParseExact()
转换此字符串(
“6/12/2018 12:00:03”
),但当日期不包含指示符
a时。m、 
p。m、 

var date = "6/01/2018  12:00:03";
var x=DateTime.ParseExact(date, "d/MM/yyyy  h:mm:ss", CultureInfo.InvariantCulture);
当时间部分包含
a时,如何转换该日期时间字符串。m、 
p。m、 
使用
DateTime.ParseExact()
函数的部件?

这就是它们的用途

但是请记住,这个
tt
说明符不会解析
a。m、 
a.m.
字符串。如果您的字符串具有这些属性,则必须操作字符串,例如删除
a
m
之间的点和/或空格等。。它还解析
AM
PM

这就是它们的用途


但是请记住,这个
tt
说明符不会解析
a。m、 
a.m.
字符串。如果您的字符串具有这些属性,则必须操作字符串,例如删除
a
m
之间的点和/或空格等。。它还解析
AM
PM

您必须首先标准化AM和PM字符串

var dateStr = "6/01/2018  12:00:03 a. m.";

var cleanDate = dateStr.Replace("a. m.", "AM").Replace("p. m.","PM");
var date = DateTime.ParseExact(cleanDate, "d/MM/yyyy  h:mm:ss tt", CultureInfo.InvariantCulture)

您必须首先标准化AM和PM字符串

var dateStr = "6/01/2018  12:00:03 a. m.";

var cleanDate = dateStr.Replace("a. m.", "AM").Replace("p. m.","PM");
var date = DateTime.ParseExact(cleanDate, "d/MM/yyyy  h:mm:ss tt", CultureInfo.InvariantCulture)

因为
a。m、 
p。m、 
是AM和PM的非标准标识符,您需要根据所需的区域设置(您当前使用的是固定区域设置)创建自己的自定义设置,并修改其和属性。然后,您可以使用格式说明符进行解析,如中所述,并将自定义的
DateTimeFormatInfo
传递给:

出于性能原因,您可能希望静态缓存
DateTimeFormatInfo
,如图所示,例如

或者,有几种文化确实使用
a。m、 
p。m、 
作为AM和PM指示符,主要是西班牙语和加泰罗尼亚语,您的应用程序可能以其中一种文化为基础运行。您可以通过以下方式发现所有此类文化:

foreach (var info in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
    if (info.DateTimeFormat.AMDesignator == "a. m." && info.DateTimeFormat.PMDesignator == "p. m.")
    {
        Console.WriteLine("Culture {0} ({1}) has the required AM and PM designators.", info.DisplayName, info.Name);
    }
}
哪个输出

Culture Catalan (ca) has the required AM and PM designators.
Culture Catalan (Andorra) (ca-AD) has the required AM and PM designators.
Culture Catalan (Catalan) (ca-ES) has the required AM and PM designators.
Culture Valencian (Spain) (ca-ES-valencia) has the required AM and PM designators.
Culture Catalan (France) (ca-FR) has the required AM and PM designators.
Culture Catalan (Italy) (ca-IT) has the required AM and PM designators.
Culture Spanish (Equatorial Guinea) (es-GQ) has the required AM and PM designators.
Culture Spanish (Mexico) (es-MX) has the required AM and PM designators.
Culture Spanish (Philippines) (es-PH) has the required AM and PM designators.
您可以通过打印到控制台来检查当前区域性的AM和PM指示符:

Console.WriteLine("Current culture AMDesignator=\"{0}\" and  PMDesignator=\"{1}\".",
                  CultureInfo.CurrentCulture.DateTimeFormat.AMDesignator,
                  CultureInfo.CurrentCulture.DateTimeFormat.PMDesignator);
您可以在这些区域性中的任意一种中解析
日期
字符串,并获得所需的结果:

var formatInfo = CultureInfo.GetCultureInfo("es-MX");

var x = DateTime.ParseExact(date, "d/MM/yyyy  h:mm:ss tt", formatInfo);
如果您用户的当前区域性是这些区域性之一,您可以通过(或如果合适):


演示小提琴。

因为
a。m、 
p。m、 
是AM和PM的非标准标识符,您需要根据所需的区域设置(您当前使用的是固定区域设置)创建自己的自定义设置,并修改其和属性。然后,您可以使用格式说明符进行解析,如中所述,并将自定义的
DateTimeFormatInfo
传递给:

出于性能原因,您可能希望静态缓存
DateTimeFormatInfo
,如图所示,例如

或者,有几种文化确实使用
a。m、 
p。m、 
作为AM和PM指示符,主要是西班牙语和加泰罗尼亚语,您的应用程序可能以其中一种文化为基础运行。您可以通过以下方式发现所有此类文化:

foreach (var info in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
    if (info.DateTimeFormat.AMDesignator == "a. m." && info.DateTimeFormat.PMDesignator == "p. m.")
    {
        Console.WriteLine("Culture {0} ({1}) has the required AM and PM designators.", info.DisplayName, info.Name);
    }
}
哪个输出

Culture Catalan (ca) has the required AM and PM designators.
Culture Catalan (Andorra) (ca-AD) has the required AM and PM designators.
Culture Catalan (Catalan) (ca-ES) has the required AM and PM designators.
Culture Valencian (Spain) (ca-ES-valencia) has the required AM and PM designators.
Culture Catalan (France) (ca-FR) has the required AM and PM designators.
Culture Catalan (Italy) (ca-IT) has the required AM and PM designators.
Culture Spanish (Equatorial Guinea) (es-GQ) has the required AM and PM designators.
Culture Spanish (Mexico) (es-MX) has the required AM and PM designators.
Culture Spanish (Philippines) (es-PH) has the required AM and PM designators.
您可以通过打印到控制台来检查当前区域性的AM和PM指示符:

Console.WriteLine("Current culture AMDesignator=\"{0}\" and  PMDesignator=\"{1}\".",
                  CultureInfo.CurrentCulture.DateTimeFormat.AMDesignator,
                  CultureInfo.CurrentCulture.DateTimeFormat.PMDesignator);
您可以在这些区域性中的任意一种中解析
日期
字符串,并获得所需的结果:

var formatInfo = CultureInfo.GetCultureInfo("es-MX");

var x = DateTime.ParseExact(date, "d/MM/yyyy  h:mm:ss tt", formatInfo);
如果您用户的当前区域性是这些区域性之一,您可以通过(或如果合适):


演示小提琴。

可能重复@WelcomeOverflow-不太可能,AM和PM字符串是非标准的
Convert.ToDateTime(“6/12/2018 12:00:03 a.m.”)
失败并引发异常,请参阅。您正在分析的区域设置是什么?可能是@WelcomeOverflow的重复-不太可能,AM和PM字符串是非标准的
Convert.ToDateTime(“6/12/2018 12:00:03 a.m.”)
失败并引发异常,请参阅。你是在什么地方解析的?