簡體   English   中英

將DateTime.Now轉換為秒

[英]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嗎?

DateTime類型支持比較運算符

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.FromTicks(DateTime.Now.Ticks).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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM