Я работаю над программой C#. Я создал базу данных EF code-first, в которой я читаю файл csv. Этот CSV-файл содержит объект DateTime. Этот DateTime объект был сохранен в базе данных. Теперь мне нужно получить это DateTime и разобрать его на ДАТУ (дд-мм-гггг) и ВРЕМЯ (чч:мм:сс.ффф). К сожалению, я не знаю, как решить эту проблему.
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();
}





Вы можете использовать метод DateTime.ParseExact()
DateTime dt = DateTime.ParseExact(yourDateTime, "yyyy/MM/DD", CultureInfo.InvariantCulture);
для получения дополнительной информации вы можете проверить:
https://docs.microsoft.com/en-us/dotnet/standard/base-types/parsing-datetime
Вы можете указать формат вашего DateTime в методе ToString.
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")
Спасибо тебе за это
Функция преобразования напрямую не работает в LINQ, Таким образом, вы также можете использовать DBFunctions для усечения времени и SqlFunctions.Датепарт для получения времени.
........
.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)
});
Вам следует рассмотреть возможность использования обоих ответов, поскольку оба они являются достоверной информацией только для разных задач. Вместо использования этого
Convert.ToDateTime(values[0] + "." + values[1]);вам следует подумать об использованииAlkanV'sответа, поскольку он будет иметь преимущество в том, что он не зависит от культуры - ваш текущий код не будет работать с другой культурой. И ответckal'sследует использовать для разделенияDateTimeна строковое представлениеDateиTime. Таким образом, один ответ хорошо читать из CSV-файла, а другой хорошо записывать в CSV-файл.