我需要将日期时间序列化/反序列化为yyyyMMdd格式的XML文件.我可以使用属性/解决方法吗?
将DateTime对象修剪为特定精度的最佳方法是什么?例如,如果我的DateTime值为'2008-09-29 09:41:43',但我只想要精确到分钟,有没有更好的方法来做到这一点?
private static DateTime TrimDateToMinute(DateTime date)
{
return new DateTime(
date.Year,
date.Month,
date.Day,
date.Hour,
date.Minute,
0);
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是让它变量,以便我可以将其精度设置为秒,分钟,小时或日.
我的C#单元测试有以下声明:
Assert.AreEqual(logoutTime, log.First().Timestamp);
Run Code Online (Sandbox Code Playgroud)
为什么它失败了以下信息:
Assert.AreEqual failed. Expected:<4/28/2010 2:30:37 PM>. Actual:<4/28/2010 2:30:37 PM>.
Run Code Online (Sandbox Code Playgroud)
他们不一样吗?
更新:
如果您只关注第二个,请使用此选项:
Assert.AreEqual(logoutTime.ToString(), log.First().Timestamp.ToString());
我有一个像这样生成的日期时间:
DateTime myDateTime = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)
然后,我将其存储在DateTime具有Entity Framework 的数据库(在类型列中)中.然后我用OData(WCF数据服务)检索它.
当它进入TimeOfDay值时:09:30:03.0196095
当它出现时,TimeOfDay值为:09:30:03.0200000
这样做的净效果使得Milliseconds在保存前被视为19,在重新加载后被视为20.
因此,当我稍后在我的代码中进行比较时,它会在应该相等的地方失败.
SQL Server的精度不如.NET吗?或者实体框架或OData搞砸了吗?
我将截断毫秒(我真的不需要它们).但我想知道为什么会这样.
我想将DateTime四舍五入到最接近的5秒.这是我目前正在做的方式,但我想知道是否有更好或更简洁的方式?
DateTime now = DateTime.Now;
int second = 0;
// round to nearest 5 second mark
if (now.Second % 5 > 2.5)
{
// round up
second = now.Second + (5 - (now.Second % 5));
}
else
{
// round down
second = now.Second - (now.Second % 5);
}
DateTime rounded = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, second);
Run Code Online (Sandbox Code Playgroud)
例如:
2011-08-11 16:59成为2011-08-11 16:30
我有两个日期属性,它们与我从一个对象映射到另一个对象完全相同.如果我将它们比较如下,则返回false:
if(obj1.d1 == obj2.d1)
{
}
Run Code Online (Sandbox Code Playgroud)
他们俩都是{01/06/2011 15:44:32}.
我无法使用DateTime.Compare因为它们可以为空.比较可空日期的最佳方法是什么?
我以下列方式插入客户.
DateTime d = DateTime.Now;
foreach(Customer cus in CustomerList)
{
cus.EntryDate = d;
}
SaveToDatbase(CustomerList);
Run Code Online (Sandbox Code Playgroud)
使用正确的输入日期成功保存日期,但是当我检索数据并将其与变量d进行比较时,它不匹配.
foreach(Customer cus in GetFromDatabase())
{
Response.Write(DateTime.Compare(cus.EntryDate, d));
}
Run Code Online (Sandbox Code Playgroud)
输出为1而不是0.我检查了插入的数据,它与d变量值匹配,毫秒.日期存储在sql server数据库中.我意识到的一件事是,如果我为cus.EntryDate和d重置毫秒为0,则输出为0.我在这里做错了什么?
我计算之间的区别dateTimePicker2和dateTimePicker1并将其转换为分钟,因为这,
durinmin = Convert.ToInt32((dateTimePicker2.Value - dateTimePicker1.Value).TotalMinutes);
Run Code Online (Sandbox Code Playgroud)
问题是,例如,如果差值是"00:17:40",则durinmin = 18.但是我想保留仅完成分钟的值,即,durinmin=17是我希望我的程序考虑的值.怎么弄?
c# ×9
datetime ×4
.net ×2
algorithm ×1
asp.net ×1
c#-4.0 ×1
comparison ×1
nullable ×1
performance ×1
sql-server ×1
unit-testing ×1
xml ×1