如何将 "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;
}
我有一个 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;
}