C# DateTime.ParseExact AM/PM指示器小写
考虑以下字符串C# DateTime.ParseExact AM/PM指示器小写,c#,datetime,formatting,C#,Datetime,Formatting,考虑以下字符串 var myString = "11/05/2015 01:04:16 p.m." 我可以在此字符串上执行DateTime.ParseExact而不强制使用字符串大写吗?am/pm指示符让我很伤心,因为它是小写的,所以无法解析。我有一个静态类,其中包含格式字符串的常量。是否有用于指定小写am/pm指示器的格式标记 格式化字符串 解析逻辑 您可以在区域性中更改DateFormatInfo的AMDesignator/PMDesignator 此信息为只读,因此,您必须创建自己的区域
var myString = "11/05/2015 01:04:16 p.m."
我可以在此字符串上执行DateTime.ParseExact而不强制使用字符串大写吗?am/pm指示符让我很伤心,因为它是小写的,所以无法解析。我有一个静态类,其中包含格式字符串的常量。是否有用于指定小写am/pm指示器的格式标记
格式化字符串
解析逻辑
您可以在区域性中更改DateFormatInfo的AMDesignator/PMDesignator 此信息为只读,因此,您必须创建自己的区域性: 我还更改了MyDateTimeFormat格式,以便它可以工作:
public class MyCultureInfo : CultureInfo
{
public MyCultureInfo():base(CultureInfo.InvariantCulture.Name)
{
}
public override DateTimeFormatInfo DateTimeFormat
{
get
{
DateTimeFormatInfo myDateTimeFormatInfo = base.DateTimeFormat;
myDateTimeFormatInfo.PMDesignator = "p.m.";
myDateTimeFormatInfo.AMDesignator = "a.m.";
return myDateTimeFormatInfo;
}
set
{
base.DateTimeFormat = value;
}
}
}
public static class MyFormat
{
public const string MyDateTimeFormat = "dd/MM/yyyy hh:mm:ss tt";
}
static int Main(string[] args)
{
var myStringDateValue = "11/05/2015 01:04:16 p.m.";
var result = DateTime.ParseExact(myStringDateValue, MyFormat.MyDateTimeFormat, new MyCultureInfo());
}
您可以在区域性中更改DateFormatInfo的AMDesignator/PMDesignator 此信息为只读,因此,您必须创建自己的区域性: 我还更改了MyDateTimeFormat格式,以便它可以工作:
public class MyCultureInfo : CultureInfo
{
public MyCultureInfo():base(CultureInfo.InvariantCulture.Name)
{
}
public override DateTimeFormatInfo DateTimeFormat
{
get
{
DateTimeFormatInfo myDateTimeFormatInfo = base.DateTimeFormat;
myDateTimeFormatInfo.PMDesignator = "p.m.";
myDateTimeFormatInfo.AMDesignator = "a.m.";
return myDateTimeFormatInfo;
}
set
{
base.DateTimeFormat = value;
}
}
}
public static class MyFormat
{
public const string MyDateTimeFormat = "dd/MM/yyyy hh:mm:ss tt";
}
static int Main(string[] args)
{
var myStringDateValue = "11/05/2015 01:04:16 p.m.";
var result = DateTime.ParseExact(myStringDateValue, MyFormat.MyDateTimeFormat, new MyCultureInfo());
}
也许是因为上午和下午不是典型的上午和下午。?尝试用am或pm替换p.m.和a.m.或删除输入字符串中的所有。@Ron-我受输入限制。我必须接受上述格式的字符串。希望使用格式字符串保持简单,并且不操纵原始输入字符串。您无法执行DateTime.ParseExactmyStringDateValue.Replace?我不确定日期时间格式字符串是否可以在字符串中指定's,请参见@Ron-据我所知,格式标记't'允许AM/PM指示符使用单个字符,但AM/PM指示符'a'或'P'必须是大写。如果改为使用格式标记“tt”,则AM/PM指示符必须是两个字符宽的“AM”或“PM”,但可以是大写或小写。使用dd/MM/yyyy hh:MM:ss tt格式字符串和我在上面发布的内容,我可以运行您的代码并获得有效日期,而无需更改大小写。可能在format strings类中添加一个解析常量。可能是因为am和pm不是典型的上午和下午。?尝试用am或pm替换p.m.和a.m.或删除输入字符串中的所有。@Ron-我受输入限制。我必须接受上述格式的字符串。希望使用格式字符串保持简单,并且不操纵原始输入字符串。您无法执行DateTime.ParseExactmyStringDateValue.Replace?我不确定日期时间格式字符串是否可以在字符串中指定's,请参见@Ron-据我所知,格式标记't'允许AM/PM指示符使用单个字符,但AM/PM指示符'a'或'P'必须是大写。如果改为使用格式标记“tt”,则AM/PM指示符必须是两个字符宽的“AM”或“PM”,但可以是大写或小写。使用dd/MM/yyyy hh:MM:ss tt格式字符串和我在上面发布的内容,我可以运行您的代码并获得有效日期,而无需更改大小写。也许可以在format strings类中添加一个解析常量。我本来希望能快速生成一个format strings,但这很管用。这也是一个很酷的答案——我从来都不知道我能定义一种定制文化。我也是,直到我看到你的问题;我希望能有一个快速格式化的字符串,但这是可行的。这也是一个很酷的答案——我从来都不知道我能定义一种定制文化。我也是,直到我看到你的问题;
public class MyCultureInfo : CultureInfo
{
public MyCultureInfo():base(CultureInfo.InvariantCulture.Name)
{
}
public override DateTimeFormatInfo DateTimeFormat
{
get
{
DateTimeFormatInfo myDateTimeFormatInfo = base.DateTimeFormat;
myDateTimeFormatInfo.PMDesignator = "p.m.";
myDateTimeFormatInfo.AMDesignator = "a.m.";
return myDateTimeFormatInfo;
}
set
{
base.DateTimeFormat = value;
}
}
}
public static class MyFormat
{
public const string MyDateTimeFormat = "dd/MM/yyyy hh:mm:ss tt";
}
static int Main(string[] args)
{
var myStringDateValue = "11/05/2015 01:04:16 p.m.";
var result = DateTime.ParseExact(myStringDateValue, MyFormat.MyDateTimeFormat, new MyCultureInfo());
}