我正在将一些代码从Java重写为C#。不幸的是,大多数代码都被“黑客攻击”,所以我只是猜测代码是如何编写的。现在,我必须在数据库中重现一些插入..
我在插入的时间戳中有点困惑。例如,在当前数据库中,记录为:10-AUG-10 05.02.57.347694000 PM
在我的代码中,我能够获得类似的内容:22-Aug-16 11.52.20.9857574 AM
此代码的想法是将创建的时间戳与当前时间戳进行比较,并在最后60秒内创建第一个时执行某些操作。
第一个问题:
我怎样才能完全重现10-AUG-10 05.02.57.347694000
,我看到所有记录最后都有“000”,我是否需要if / else,或者是否有任何函数可以保留最后9位数的长度?
第二个问题:
如果它只是数字,我知道我可以从数据库中检索值然后进行比较,但由于格式为:10-AUG-10 05.02.57.347694000
,不确定如何处理该部分
有什么建议吗?
解决方案:
在阅读了一些评论之后,我对如何解决这个问题有了更好的理解。我决定保持简单,只需创建DateTime变量,然后只使用减法方法,以查看这两者之间有多少分钟差异。
例:
DateTime guidTimestamp; // 8月25日上午10:02:47
DateTime currentTimestamp = DateTime.Now;
public int calculateMinutes(DateTime dt1, DateTime dt2)
{
int min = 0;
try
{
min = (int)((dt1 - dt2).TotalSeconds);
}
catch (Exception ex)
{
Debug.WriteLine("Exception - Date Time error: " + ex.Message);
}
return min;
}
答案 0 :(得分:2)
DB中字段的数据类型可能为string
。你不应该像MSDN所说的那样具有如此高的精确度。
以下代码行生成DateTime.Now.ToString("dd-MMM-yy hh.mm.ss.ffffff tt", System.Globalization.CultureInfo.InvariantCulture).ToUpper() + "000"
,其当前日期与您提到的格式完全相同:
DateTime
以下代码行使用自定义格式string
生成DateTime.ParseExact("10-AUG-10 05.02.57.347694 AM", "dd-MMM-yy hh.mm.ss.ffffff tt", System.Globalization.CultureInfo.InvariantCulture)
:
milliseconds
如您所见,您需要删除ParseExact
部分中的这3个零,以使string
处理<dl>
<dt>Income:</dt>
<dd>1.200,00 €</dd>
<dt>Price:</dt>
<dd>$31,99</dd>
</dl>
值。如果您愿意,可以阅读正则表达式或硬编码。