2016-01-24 1 views
6

Я новичок, я немного пытаюсь отформатировать и отобразить некоторые данные часов мейнфрейма IBM TOD. Я хочу отформатировать данные как по GMT, так и по местному времени (по умолчанию - в противном случае в зоне, которую указывает пользователь).В Go, как я могу извлечь значение моего текущего местного смещения по времени?

Для этого мне нужно получить значение локального смещения по времени от GMT как знаковое целое число секунд.

В zoneinfo.go (который я признаюсь, что я не полностью понимаю), я могу видеть

// A zone represents a single time zone such as CEST or CET. 
type zone struct { 
    name string // abbreviated name, "CET" 
    offset int // seconds east of UTC 
    isDST bool // is this zone Daylight Savings Time? 
} 

, но это не так, я думаю, на экспорт, так что этот код не работает:

package main 
import ("time"; "fmt") 

func main() { 
    l, _ := time.LoadLocation("Local") 
    fmt.Printf("%v\n", l.zone.offset) 
} 

Есть ли простой способ получить эту информацию?

+0

@olif выигрывает в очень близкой перспективе. Спасибо всем за ваши ответы. –

ответ

9

Вы можете использовать метод зоны() от типа времени:

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    t := time.Now() 
    _, z := t.Zone() 
    fmt.Println(z) 
} 

зона вычисляет временную зону в действие в момент времени Т, возвращая сокращенное название зоны (например, «СЕТ») и его смещение в секундах к востоку от UTC.

5

Package time

func (Time) Local

func (t Time) Local() Time 

Местные возвращает т с адресом, установленным на местное время.

func (Time) Zone

func (t Time) Zone() (name string, offset int) 

зона вычисляет временную зону в действие в момент времени Т, возвращая сокращенное название зоны (например, «СЕТ») и его смещение в секундах востоку от UTC.

type Location

type Location struct { 
     // contains filtered or unexported fields 
} 

Расположение карты моментов времени в зоне использования в то время. Как правило, Местоположение представляет собой совокупность временных задержек в в географическом районе, таком как CEST и CET для Центральной Европы.

var Local *Location = &localLoc 

Местный - это местный часовой пояс системы.

var UTC *Location = &utcLoc 

UTC представляет собой универсальное согласованное время (UTC).

func (Time) In

func (t Time) In(loc *Location) Time 

В возвратов т с информацией о местоположении, установленной в LOC.

В панике, если loc nil.

Например,

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    t := time.Now() 

    // For a time t, offset in seconds east of UTC (GMT) 
    _, offset := t.Local().Zone() 
    fmt.Println(offset) 

    // For a time t, format and display as UTC (GMT) and local times. 
    fmt.Println(t.In(time.UTC)) 
    fmt.Println(t.In(time.Local)) 
} 

Выход:

-18000 
2016-01-24 16:48:32.852638798 +0000 UTC 
2016-01-24 11:48:32.852638798 -0500 EST 
3

Я не думаю, что это имеет смысл, чтобы вручную преобразовать время в другой TZ. Использовать time.Time.In Функция:

package main 

import (
    "fmt" 
    "time" 
) 

func printTime(t time.Time) { 
    zone, offset := t.Zone() 
    fmt.Println(t.Format(time.Kitchen), "Zone:", zone, "Offset UTC:", offset) 
} 

func main() { 
    printTime(time.Now()) 
    printTime(time.Now().UTC()) 

    loc, _ := time.LoadLocation("America/New_York") 
    printTime(time.Now().In(loc)) 
} 
Смежные вопросы