2015-10-15 116 views
-1

我有下面的代碼將一個字符串作爲輸入轉換爲UNIX時間戳。我想在golang中做同樣的事情,但我無法識別在Go中會給出等價的DateTimeOffset結構的結構或函數。什麼是轉換爲UNIX時間戳的C#DateTimeOffset相當於

class Program 
{ 
    static void Main(string[] args) 
    { 
     var date = GetUtcTimestampFromAttribute(); 
     Console.WriteLine(date); 
     if (date != null) 
     { 
      Console.WriteLine(ToUnixTimeStamp(date.Value)); 
     } 

     Console.ReadKey(); 
    } 

    public static DateTimeOffset? GetUtcTimestampFromAttribute() 
    { 
     var ticks = long.Parse("7036640000000"); 
     Console.WriteLine(ticks); 
     return GetUtcTimestampFromTicks(ticks); 
    } 

    public static DateTimeOffset? GetUtcTimestampFromTicks(long ticks) 
    { 
     Console.WriteLine(new DateTimeOffset(ticks, TimeSpan.Zero)); 
     return ticks != 0 ? 
      new DateTimeOffset(ticks, TimeSpan.Zero) : 
      (DateTimeOffset?)null; 
    } 

    public static long ToUnixTimeStamp(DateTimeOffset timeStamp) 
    { 
     var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero); 
     return Convert.ToInt64((timeStamp - epoch).TotalSeconds); 
    } 
} 

例如:

輸入:635804753769100000

輸出:1444878577

在UTC相應時間:二零一五年十月十五日上午03點09分36秒+00:00

有人可以幫助我的解決方法來獲得上述結果。

感謝

回答

1

例如,

package main 

import (
    "fmt" 
    "time" 
) 

func TimeFromTicks(ticks int64) time.Time { 
    base := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix() 
    return time.Unix(ticks/10000000+base, ticks%10000000).UTC() 
} 

func main() { 
    fmt.Println(TimeFromTicks(635804753769100000)) 
} 

輸出:

2015-10-15 03:09:36.0091 +0000 UTC 
6

我相信time包有你需要的一切,這是國際海事組織的最佳時機庫我在任何語言一起工作。例如:

package main 

import(
    "fmt" 
    "time" 
) 

func main(){ 

    // this is how you parse a unix timestamp  
    t := time.Unix(1444902545, 0) 

    // get the UTC time 
    fmt.Println("The time converted to UTC:", t.UTC()) 

    // convert it to any zone: FixedZone can take a utc offset and zone name 
    fmt.Println(t.In(time.FixedZone("IST", 7200))) 

} 

EDIT轉換的時間對象返回給一個Unix時間戳是簡單的:

t.Unix() 

t.UnixNano() 
+0

我不想要一個時間分區輸出。我需要一個Unix時間戳。我正在使用C#,但我無法將它放在代碼中。 – Prashant

+0

@Prashant閱讀lib文檔,我只是給了一個簡單的例子。基本上'time.Time'對象可以以秒或納秒的分辨率轉換爲unix時間戳。 –

+0

是@not_a_Golfer,但我的問題是我無法將該輸入號碼轉換爲有效的時間對象。 – Prashant