我无法使用 EPPlus 从 Excel 反序列化日期时间字符串。我已经阅读了有关此的其他答案,但仍然无法正常工作并得到错误:字符串'Md-yy hh:mm'未被识别为有效的日期时间。
根据在该主题上找到的其他答案,我已将 DateTimeFormat 更改为“M/d/yy hh:mm”,这是 EPPlus 在我将手表放在上面时以字符串形式返回的内容。我目前的文化是“en-UK”,但我使用的是 InvariantCulture,因为 EPPlus 输出了我更愿意使用的上述格式。如果这是一个问题,那么我不介意更改它,但我看不出从美国格式转换为英国格式的意义,只是因为它在数据库中再次更改为国际 ISO 格式。
它仍然必须以某种方式认为它遵循英国日期时间格式,但我看不出我哪里出错了。任何帮助将不胜感激!谢谢
这是我目前所拥有的:
var dateTimeConverter = new IsoDateTimeConverter
{
Culture = CultureInfo.InvariantCulture,
DateTimeFormat = "M/d/yy h:mm",
DateTimeStyles = DateTimeStyles.AssumeLocal
};
var excelImportResponse = new ExcelImportResponse<T>();
foreach (DataRow row in dataTable.AsEnumerable())
{
excelImportResponse.Objects.Add(
JsonConvert.DeserializeObject<T>(
new JObject(
row.Table.Columns
.Cast<DataColumn>()
.Select(c => new JProperty(c.ColumnName.Trim(), JToken.FromObject(row[c])))
)
.ToString(Formatting.None),
new JsonSerializerSettings
{
Error = delegate (object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
{
excelImportResponse.Errors.Add(args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
},
Converters = { dateTimeConverter }
})
);
}
错误:字符串 '7/1/20 14:15' 未被识别为有效的日期时间。
System.DateTimeParse.ParseExact(ReadOnlySpan) 的完全异常1 s, ReadOnlySpan
1 格式, DateTimeFormatInfo dtfi, DateTimeStyles style) at System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style) at Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer ) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader,对象目标)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract,JsonProperty 成员,字符串 id)