从数据库获取日期时间并将其拆分

时间:2019-07-10 13:16:03

标签: c# asp.net-mvc entity-framework

我正在研究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();
        }

3 个答案:

答案 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)
            });