我正在研究C#程序。我创建了一个EF代码优先的数据库,在其中读取了一个csv文件。该csv文件包含一个DateTime
对象。该DateTime
对象已保存在数据库中。现在,我必须获取此DateTime
并将其解析为DATE(dd-mm-yyyy)和TIME(hh:mm:ss.fff)。不幸的是,我不知道如何解决这个问题。
private readonly PerformanceAnalyseToolContext db;
public HomeController(PerformanceAnalyseToolContext db)
{
this.db = db;
}
public IActionResult ReadCsvData(string csvData) //get csvData String
{
ChartData chartData = new ChartData();
string[] lines = csvData.Split("\n"); //Split after enter
//List<ChartData> chartDataList = new List<ChartData>();
foreach (var line in lines)
{
string[] values = line.Split(','); // SPlit after ,
try //try catch, because if an error occurs the process has to continue
{
chartData = new ChartData { //Create object from csv data
Timestamp = Convert.ToDateTime(values[0] + "." + values[1]),
Function = Convert.ToString(values[2]),
Duration = Convert.ToInt32(values[4]),
IsError = Convert.ToBoolean(values[5])
};
db.ChartDatas.Add(chartData); //Save object into database
db.SaveChanges();
}
catch(Exception exc)
{
exc.ToString();
}
}
return View(chartData);
}
public List<ChartDatanDTO> GetDataForChart(string function)
{ //here i get the Data from the DB
return db.ChartDatas
.Where(x => x.Function == function)
.Select(x => new ChartDatanDTO
{
durat = x.Duration,
err = x.IsError,
time =x.Timestamp
})
.ToList();
}
答案 0 :(得分:3)
您可以使用DateTime.ParseExact()
方法
DateTime dt = DateTime.ParseExact(yourDateTime, "yyyy/MM/DD", CultureInfo.InvariantCulture);
有关更多信息,您可以检查:
https://docs.microsoft.com/en-us/dotnet/standard/base-types/parsing-datetime
答案 1 :(得分:3)
您可以在ToString方法中指定DateTime
的格式。
time = x.Timestamp.ToString("dd-MM-yyyy hh:mm:ss.fff")
如果需要将它们分开,则可以执行两次ToString。
date = x.Timestamp.ToString("dd-MM-yyyy")
time = x.Timestamp.ToString("hh:mm:ss.fff")
答案 2 :(得分:0)
直接转换功能在LINQ中不起作用, 因此,您还可以使用 DBFunctions 截断时间,并使用 SqlFunctions.DatePart 来获取时间
........
.Select(x => new ChartDatanDTO
{
date = DbFunctions.TruncateTime(x.YourDateTime),
time = SqlFunctions.DatePart("hh", x.YourDateTime) + ":" +
SqlFunctions.DatePart("mm", x.YourDateTime) +":" +
SqlFunctions.DatePart("ss", x.YourDateTime)
});