我试图将.NET TimeSpan
对象序列化为XML,但它无法正常工作.一个快速谷歌建议,虽然TimeSpan
是可序列化的,但XmlCustomFormatter
它不提供将TimeSpan
对象转换为XML或从XML 转换对象的方法.
一种建议的方法是忽略TimeSpan
序列化,而是序列化结果TimeSpan.Ticks
(并new TimeSpan(ticks)
用于反序列化).一个例子如下:
[Serializable]
public class MyClass
{
// Local Variable
private TimeSpan m_TimeSinceLastEvent;
// Public Property - XmlIgnore as it doesn't serialize anyway
[XmlIgnore]
public TimeSpan TimeSinceLastEvent
{
get { return m_TimeSinceLastEvent; }
set { m_TimeSinceLastEvent = value; }
}
// Pretend property for serialization
[XmlElement("TimeSinceLastEvent")]
public long TimeSinceLastEventTicks
{
get { return m_TimeSinceLastEvent.Ticks; }
set { m_TimeSinceLastEvent = new TimeSpan(value); }
}
} …
Run Code Online (Sandbox Code Playgroud) 我试图TimeSpan
在SQL Server 2008 R2中存储.Net .
EF Code First似乎建议它应该存储为Time(7)
SQL中的一个.
但是TimeSpan
.Net可以处理比24小时更长的时间.
TimeSpan
在SQL服务器中处理存储.Net的最佳方法是什么?
我正从数据库中检索两个日期时间值.一旦检索到值,我需要两个值之间的差异.为此,我创建了一个时间跨度变量来存储2个日期值的差异.
TimeSpan? variable = datevalue1 - datevalue2;
Run Code Online (Sandbox Code Playgroud)
现在我需要以小时数的形式显示存储在Timespan变量中的差异.我提到了TimeSpan.TotalHours但由于某种原因无法应用它.我怎么做?我在MVC项目上使用C#.我只需要以小时显示差异值?
编辑:由于时间跨度可以为空,我无法使用总小时数属性.现在我可以通过做TimeSpanVal.Value.TotalHours来使用它 ;
使用.NET 3.5
我想确定当前时间是否落在时间范围内.
到目前为止,我有目前的情况:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)
我正在搞清楚如何获得转换和比较的时间范围.这会有用吗?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
Run Code Online (Sandbox Code Playgroud)
更新1:感谢大家的建议.我不熟悉TimeSpan功能.
在C#/.NET TimeSpan
有TotalDays
,TotalMinutes
等等,但我无法弄清楚总月差的公式.每月可变天数和闰年一直让我失望.我如何获得TotalMonths?
编辑抱歉没有更清楚:我知道我实际上无法得到这个,TimeSpan
但我想使用TotalDays
,TotalMinutes
并将是一个很好的例子来表达我正在寻找...除了我想要得到总月.
示例:2009年12月25日 - 2009年10月6日= 2 TotalMonths.10月6日至11月5日等于0个月.11月6日,1个月.12月6日,2个月
这两个都会产生错误,说它们必须是编译时常量:
void Foo(TimeSpan span = TimeSpan.FromSeconds(2.0))
void Foo(TimeSpan span = new TimeSpan(2000))
Run Code Online (Sandbox Code Playgroud)
首先,有人可以解释为什么在编译时无法确定这些值吗?有没有办法为可选的TimeSpan对象指定默认值?
我想知道程序/功能/订单需要多长时间才能完成测试.
这是我做的,但我的方法是错误的'因为如果秒的差异为0则无法返回经过的毫秒:
请注意,睡眠值为500毫秒,因此经过的秒数为0,则无法返回毫秒数.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
Run Code Online (Sandbox Code Playgroud)
有人能告诉我更好的方法吗?也许有一个TimeSpan
?
解决方案:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, …
Run Code Online (Sandbox Code Playgroud) 我有两个DateTime变量,beginTime和endTime.通过执行以下操作,我得到了它们的不同之处:
TimeSpan dateDifference = endTime.Subtract(beginTime);
Run Code Online (Sandbox Code Playgroud)
我现在如何使用C#以hh,mm mins,ss secs格式返回一串字符串.
如果差异是00:06:32.4458750
它应该返回00小时,06分钟,32秒
如何在C#中乘以TimeSpan对象?假设变量duration
是TimeSpan,我想,例如
duration*5
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误"operator*不能应用于类型TimeSpan和int".这是我目前的解决方法
duration+duration+duration+duration+duration
Run Code Online (Sandbox Code Playgroud)
但这并没有扩展到非整数倍,例如. duration * 3.5