C# 将AM/PM添加到时间

C# 将AM/PM添加到时间,c#,string.format,C#,String.format,我的datetime是这种格式的2017-01-15T21:00-07:00,所以我像这样解析它 string ADT = Convert.ToString(timestamp.DateOrTimestamp); int index = ADT.IndexOf("T"); string FADT = (index > 0 ? ADT.Substring(0, index) : ""); DateTime dtFADT = DateTime.ParseExact(FADT, "yyyy-MM

我的
datetime
是这种格式的
2017-01-15T21:00-07:00
,所以我像这样解析它

string ADT = Convert.ToString(timestamp.DateOrTimestamp);
int index = ADT.IndexOf("T");
string FADT = (index > 0 ? ADT.Substring(0, index) : "");
DateTime dtFADT = DateTime.ParseExact(FADT, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
string ADT1 = ADT.Split('T', '-')[3];

Console.WriteLine("{0}: {1}", timestamp.Type, dtFADT.ToString("MM/dd/yyyy") + " " + String.Format("{0:h:mm t}", ADT1));
将写入控制台:
Delivery:01/15/2017 09:00:00


为什么
String.Format()
不能将AM/PM添加到我的时间中?

这可能会帮你解决问题

string smdt = "2017-01-15T21:00-07:00";
string format = "yyyy-MM-ddTHH:mmzzz";
DateTime dt = DateTime.ParseExact(smdt, format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
string extractedDate = dt.ToString("dd/MM/yy h:mm tt");

为了做类似的事情,我最终不得不制作一个基于eu US的CultureInfo,但第二个参数设置为false,以不允许系统/用户过度使用格式

public static CultureInfo enUS = new CultureInfo("en-US", false);
然后,我可以在任何我需要的地方使用它来格式化一个日期进行解析,或者使用一个日期/时间进行字符串转换,该日期/时间的tt部分格式将放置我想要的AM或PM


运行软件的PC机上的系统语言设置与我的不同。他们用的是上午或下午之类的时间。当我们想要使用AM或PM时。

仍然没有添加AM/PM inI不明白您在追求什么?根据配置的系统时间格式,无法正常工作。在windows中,您可以在此配置:(控制面板|语言|更改日期、时间或数字格式|其他设置…|时间)请参阅AM和PM符号时间格式。我一直是早上而不是21:00-07:00,这是一个范围还是什么?如果
07
表示秒,那么最后一个
00
表示什么?请检查:并且:您的
DateTime
的格式不是
2017-01-15T21:00-07:00
。这是一个
字符串
<代码>日期时间没有格式-它只是一个数字。只有当您调用
.ToString(…)
时,您才能创建一个具有格式的
字符串。@Enigmativity-很抱歉,对于日期时间或字符串,您没有正确理解日期时间与字符串。请举一个解决我的问题的适用例子,而不是一个关于变量的训斥或教训。@StarsFlyFreeFromCozyNights-对不起,没有训斥。只是想弄清楚
DateTime
和日期/时间格式之间的关系。