我有一个DataGrid,它包含几个小时的值,我想知道:
如何从我的DataGrid获取时间并将其转换为int(或double)变量。
我的目标是使用我的DataGrid时间值进行一些操作,比如在其中添加数字
实施例: 使用我的“dataGridView1.Rows [1] .Cells [2] .Value.ToString();”它将显示一个DateTime值(在我的DataGrid中),有了这个值,我想过滤掉它的时间并将其转换为int
我想要“抓住”时间的代码部分:
$(function() {
$('#btnSignIn').click(function() {
$.ajax({
url: '/ValidateLogin',
data: $('form').serialize(),
type: 'POST',
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
});
});
我想得到“value”(这是DataGrid的DateTime值)并将其转换为int。
请注意: - 我的dataGrid中的日期与我无关,我只需要选择时间(是的,我知道我不能“拆分”DateTime来单独完成它们)
答案 0 :(得分:4)
如果你愿意限制在毫秒级分辨率,那么这很容易。
给定一个日期/时间,你想把时间部分作为一个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
,方便存储时间值。
如果你想从午夜开始转动"毫秒"回到TimeSpan
,您只需执行此操作:
var timeSpan = TimeSpan.FromMilliseconds(timeMsSinceMidnight);
答案 1 :(得分:1)
第一步是将字符串转换为DateTime。使用DateTime.TryParse(字符串值,out DateTime dt)。然后正如Mathew Watson正确建议的那样,使用dt.TimeOfDay.TotalMilliseconds将变量dt的值转换为毫秒。如果它符合您的要求,也可以在TotalSeconds或TotalMinutes中转换范围。 在检查单元格值是否为null之前,尽量避免直接调用ToString()方法。如果我想避免检查,我会让编译器通过使用类似:Rows [3] .Cells [2] .Value +""而不是Value.ToString()。
答案 2 :(得分:1)
混合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();
答案 3 :(得分:0)
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;
}