[英]Convert DateTime.Now to Seconds
我正在嘗試編寫一個函數,將DateTime.Now實例轉換為它表示的秒數,以便我可以將它與另一個DateTime實例進行比較。 這是我目前擁有的:
public static int convertDateTimeToSeconds(DateTime dateTimeToConvert)
{
int secsInAMin = 60;
int secsInAnHour = 60 * secsInAMin;
int secsInADay = 24 * secsInAnHour;
double secsInAYear = (int)365.25 * secsInADay;
int totalSeconds = (int)(dateTimeToConvert.Year * secsInAYear) +
(dateTimeToConvert.DayOfYear * secsInADay) +
(dateTimeToConvert.Hour * secsInAnHour) +
(dateTimeToConvert.Minute * secsInAMin) +
dateTimeToConvert.Second;
return totalSeconds;
}
我意識到我在一年內截斷了秒的計算,但我不需要我的計算精確。 我真的想知道我用來計算秒數的方法是否正確。
有沒有人能夠更好地計算從DateTime對象給出的秒數?
另外,如果我要用C#編碼,如果我要計算自0 AD以來的所有秒數,那么返回類型應該是int64嗎?
if (dateTimeA > dateTimeB)
{
...
這也適用於DateTime.AddSeconds返回的DateTime值:
if (dateTimeA.AddSeconds(42) > dateTimeB)
{
...
如果您確實需要自01/01/0001 00:00:00以來經過的秒數 ,則可以計算兩個DateTime值之間的差異。 生成的TimeSpan值具有TotalSeconds屬性:
double result = DateTime.Now.Subtract(DateTime.MinValue).TotalSeconds;
將DateTime對象轉換為秒確實沒有意義。 只有在處理一段時間(TimeSpan)時,秒才有意義。 您是否要比較兩個日期以獲得它們之間的秒數:
TimeSpan diff = DateTime.Now - PreviousDateTime;
double seconds = diff.TotalSeconds;
如果目的是找到兩個日期之間的秒數,那么使用TimeSpan對象會好得多。
TimeSpan span = date2 - date1;
double seconds = span.TotalSeconds;
如果要比較2個DateTime對象,為什么不使用提供的運算符? http://msdn.microsoft.com/en-us/library/aa326723%28v=VS.71%29.aspx
DateTime a, b;
if (a > b) //a is after b
假設您確實需要獲取datetime對象的秒數,您可以直接從中獲取“Ticks”屬性。 這些不是幾秒鍾,但您可以輕松划分適當的因素,將Ticks轉換為秒。 請參閱: http : //msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx
所以,像:
DateTime.Now.Ticks/TimeSpan.TicksPerSecond
我會使用TimeSpan類來獲取兩個DateTime實例之間的確切差異。 這是一個例子:
DateTime dt1 = DateTime.Now;
DateTime dt2 = new DateTime(2003,4,15);
TimeSpan ts = dt1.Subtract(dt2);
一旦TimeSpan值( ts
,在上面的代碼片段中)可用,您可以檢查其值以將TimeSpan正確轉換為給定的秒數。
使用TimeSpan來獲取兩個DateTime之間的經過時間可能是最好的方法,但是如果你真的想獲得給定DateTime的秒數,你可以執行以下操作:
DateTime dateTimeToConvert = DateTime.Now;
TimeSpan tsElapsed = dateTimeToConvert - DateTime.MinValue;
return tsElapsed.TotalSeconds;
請注意,tsElapsed.TotalSeconds是Double,而不是Int。
請注意,目標是獲取自DateTime.MinVal(日歷的第一天)以來的秒數。 我這樣說,因為我看到所有這些答案都是“你做這樣的時間比較......加入對象,乘以那個對象並對它們進行交叉計算,除以求和結果的商,然后加速不是你問的。“
這里有一個非常簡單的答案。 刻度是100納秒的增量。 DateTime object.Ticks是自1/1/0001以來發生的刻度數。 即,零年。 一秒鍾就有1000萬納秒。 所以...
public static long convertDateTimeToSeconds(DateTime dateTimeToConvert) {
// According to Wikipedia, there are 10,000,000 ticks in a second, and Now.Ticks is the span since 1/1/0001.
long NumSeconds= dateTimeToConvert.Ticks / 10000000;
return NumSeconds;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.