【发布时间】:2018-09-10 12:53:17
【问题描述】:
有什么方法可以转换从 JSON 文件中读取的日期?我的文件中的示例记录是:
{
"UserID": 73274,
"Created": "17-03-2018 06:35",
"Office": "Washington"
},
我正在做的是导入 JSON 文件并将其内容保存到数据库。问题是,当日期为DD-MM-YYYY hh:ss 格式时,它根本不起作用。但是当日期是YYYY-MM-DDThh:mm:ss 格式时,一切都很好。如何在读取此文件后将日期解析为另一种格式并对已解析日期的文件执行以下操作?
我负责此操作的部分控制器是:
if (file.ContentType == "application/json")
{
try
{
using (var reader = new StreamReader(file.OpenReadStream()))
{
content = reader.ReadToEnd();
}
}
catch
{
return BadRequest(Messages.fileNotChosen);
}
try
{
userObjects = JsonConvert.DeserializeObject<List<UserImportModel>>(content);
}
catch
{
return BadRequest();
}
}
当日期格式为 YYYY-MM-DDThh:mm:ss 时,正确计算 userObjects 并且控制器移动到我执行添加到数据库的部分。当日期格式为DD-MM-YYYY hh:ss时,userObjects = 0,控制器移动到catch,然后返回BadRequest()。
编辑:UserImportModel 类的代码:
public class UserImportModel
{
public string UserID { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime Created { get; set; }
public string Office { get; set; }
}
【问题讨论】:
-
this question 的可能重复项
-
如果格式是固定的,这里有一个 Json.Net 的解决方案:stackoverflow.com/questions/21256132/… 但是如果你有多种日期格式,那么你可能需要手动反序列化字符串。
-
恕我直言XY Problem。您应该始终将您的日期作为 ISO 日期传递并返回,因为您不一定知道用户的全球化设置。 UI(WPF、WinForms、HTML/JavaScript、Angular 等)应该占用 ISO 时间(它包含时区信息等)并以用户语言格式和时区显示
标签: c# asp.net json date asp.net-core