如何将 "time" 从 DateTime 转换为 int?

How to convert the "time" from DateTime into int?

我有一个 DataGrid,其中包含一些以小时为单位的值,我想知道:

如何仅从我的 DataGrid 中获取时间并将其转换为 int(或 double)变量。

我的目标是对我的 DataGrid 时间值进行一些操作,比如向其中添加数字

示例: 使用我的 "dataGridView1.Rows[1].Cells[2].Value.ToString();" 它将显示一个 DateTime 值(在我的 DataGrid 中),有了这个值,我只想从中过滤时间并将其转换为 int

我想要 "capture" 时间的代码部分:

txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value.ToString(); 
string value = dataGridView1.Rows[0].Cells[2].Value.ToString(); 
lblLeft.Text = value.Split(' ')[1]; 

我想获取 "value"(这是来自 DataGrid 的 DateTime 值)并将其转换为 int。

注意: - 我的数据网格中的日期与我无关,我只需要选择时间(是的,我知道我不能 "split" DateTime 单独执行它们)

如果您愿意受限于毫秒分辨率,那么这很容易。

给定一个 date/time 你想从中获取时间部分作为一个 int,你可以得到自午夜以来的毫秒数,如下所示:

DateTime dateTime = DateTime.Now;
int timeMsSinceMidnight = (int)dateTime.TimeOfDay.TotalMilliseconds;

如果您想以此重构原始日期和时间,您需要原始日期和从午夜开始的毫秒数:

DateTime date = dateTime.Date; // Midnight.
DateTime restoredTime = date.AddMilliseconds(timeMsSinceMidnight);

测试程序:

DateTime dateTime = DateTime.Now;

Console.WriteLine("Original date/time: " + dateTime );

int timeMsSinceMidnight = (int)dateTime.TimeOfDay.TotalMilliseconds;

DateTime date = dateTime.Date; // Midnight.
DateTime restoredTime = date.AddMilliseconds(timeMsSinceMidnight);

Console.WriteLine("Restored date/time: " + restoredTime);

time.TimeOfDay返回的值是TimeSpan类型,方便存储时间值。

如果您想将 "milliseconds since midnight" 变回 TimeSpan,您只需这样做:

var timeSpan = TimeSpan.FromMilliseconds(timeMsSinceMidnight);

第一步是将字符串转换为日期时间。使用 DateTime.TryParse(string value, out DateTime dt)。然后正如 Mathew Watson 正确建议的那样,使用 dt.TimeOfDay.TotalMilliseconds 将变量 dt 的值转换为毫秒。如果适合您的要求,也可以将跨度转换为 TotalSeconds 或 TotalMinutes。 尽量避免在检查单元格值是否为空之前直接调用 ToString() 方法。如果我想避免检查,我会让编译器使用类似的东西来完成它:Rows[3].Cells[2].Value + "" 而不是 Value.ToString().

结合 Mathew 和 Mukesh Adhvaryu 的回答,我进入了这个,它完全符合我的需要,谢谢你们的支持!

 txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value + "";

        string value = dataGridView1.Rows[0].Cells[2].Value + "";
        lblLeft.Text = value.Split(' ')[1];
        textStatus.Text = "";



        DateTime timeConvert;
        DateTime.TryParse(value, out timeConvert);

        double time;
        time = timeConvert.TimeOfDay.TotalMilliseconds;


        var timeSpan = TimeSpan.FromMilliseconds(time);


        lblSoma.Text = timeSpan.ToString();
     static void Main(string[] args)
     {
        string time1 = "11:15 AM";
        string time2 = "11:15 PM";
        var t1 = ConvertTimeToInt(time1);
        var t2 = ConvertTimeToInt(time2);
        Console.WriteLine("{0}", t1);
        Console.WriteLine("{0}", t2);
        Console.WriteLine("{0:dd/MM/yyyy hh:mm tt}", ConvertIntToTime(t1));
        Console.WriteLine("{0:dd/MM/yyyy hh:mm tt}", ConvertIntToTime(t2));
        Console.ReadLine();
    }

    static long ConvertTimeToInt(string input)
    {
        var date = DateTime.ParseExact(input, "hh:mm tt", CultureInfo.InvariantCulture);
        TimeSpan span = date.TimeOfDay;
        Console.WriteLine("{0:dd/MM/yyyy hh:mm tt}", date);
        return span.Ticks;
    }

    static DateTime ConvertIntToTime(long input)
    {
        TimeSpan span = TimeSpan.FromTicks(input);
        var date = new DateTime(span.Ticks);
        Console.WriteLine("{0:dd/MM/yyyy hh:mm tt}", date);
        return date;
    }