我正在尝试将Active Directory属性(whenCreated)转换为DateTime然后转换为String,但我不断收到FormatException,任何想法为什么?这是代码:
string format = "YYYYMMDDHHMMSS.0Z";
DateTime dt = DateTime.ParseExact(sResult.Properties["whenCreated"][0].ToString(),format,CultureInfo.InvariantCulture);
string whenCreated = dt.ToString();
此外,sResult.Properties["whenCreated"][0].ToString()
是Active Directory搜索(检索到的日期)的结果,并具有字符串(通用时间)语法。
答案 0 :(得分:1)
DateTime.ParseExact方法需要一个格式字符串,告诉它在输入字符串中哪个有效日期的组件。您的'd'格式不符合此标准。我不知道您输入的内容(如果您添加它会有帮助)。但是我们假设今天是“2017/31/05 10:27:45”。那么你的格式字符串必须是:“yyyy / dd / MM HH:mm:ss”
DateTime dt = DateTime.ParseExact("2017/31/05 10:27:45","yyyy/dd/MM HH:mm:ss",CultureInfo.InvariantCulture);
答案 1 :(得分:1)
根据OP链接的documentation:
广义时间语法的格式为" YYYYMMDDHHMMSS.0Z"。可接受值的一个例子是" 20010928060000.0Z"
和
如果在GMT以外的时区中指定时间,则时区和GMT之间的差异将附加到字符串而不是" Z"格式为" YYYYMMDDHHMMSS.0 [+/-] HHMM"。可接受值的一个例子是" 20010928060000.0 + 0200"
所以你需要两个格式字符串才能解析字符串,如下所示:
string adDate = "20010928060000.0Z";
string adDate2 = "20010928060000.0+0200";
string format = "yyyyMMddhhmmss.0Z";
string format2 = "yyyyMMddhhmmss.0zzz";
DateTime dtdtdt = DateTime.ParseExact(adDate2, new string[] { format, format2 },
CultureInfo.InvariantCulture,DateTimeStyles.None);