2015-10-15 2 views
-1

У меня есть следующий код, который берет строку в качестве ввода, которая преобразуется в метку времени UNIX. Я хочу сделать то же самое в golang, но я не могу распознать структуру или функцию, которая даст эквивалент структуры DateTimeOffset в Go.Что такое эквивалент C# DateTimeOffset в Go

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: 10/15/2015 3:09:36 AM +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))) 

} 

РЕДАКТИРОВАТЬ Преобразование объекта времени обратно в метку времени Unix проста:

t.Unix() 

или

t.UnixNano() 
+0

Я не хочу, чтобы время было зонировано. Мне нужна отметка времени Unix. Я использую C#, но я не могу включить его в код go. – Prashant

+0

@Prashant читал документацию lib, я просто дал упрощенный пример. В принципе, объект time.Time может быть преобразован в временную метку unix во втором или наносекундном разрешении. –

+0

Да @not_a_Golfer, но моя проблема в том, что я не могу преобразовать этот номер ввода в действительный объект времени. – Prashant