2016-01-24 6 views
6

मैं एक गो न्यूबी हूं, और मैं थोड़ा आईबीएम मेनफ्रेम TOD घड़ी डेटा प्रारूपित करने और प्रदर्शित करने की कोशिश कर रहा हूं। मैं जीएमटी और स्थानीय समय दोनों में डेटा को प्रारूपित करना चाहता हूं (डिफ़ॉल्ट रूप से - अन्यथा उस क्षेत्र में जो उपयोगकर्ता निर्दिष्ट करता है)।गो में, मैं अपने वर्तमान स्थानीय समय ऑफसेट के मूल्य को कैसे निकाल सकता हूं?

इसके लिए, मुझे जीएमटी से स्थानीय समय ऑफसेट का मूल्य सेकंड के हस्ताक्षरित पूर्णांक संख्या के रूप में प्राप्त करने की आवश्यकता है।

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) 
} 

जोन समय टी प्रभाव में समय क्षेत्र की गणना करता है, (जैसे कि "सीईटी" के रूप में) क्षेत्र के संक्षिप्त नाम लौटने और यूटीसी के पूर्व में सेकंड में इसकी ऑफसेट।

5

Package time

func (Time) Local

func (t Time) Local() Time 

स्थान स्थानीय समय के लिए सेट के साथ स्थानीय रिटर्न टी।

func (Time) Zone

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

जोन समय टी प्रभाव में समय क्षेत्र की गणना करता है, और अपने ही सेकंड में ऑफसेट यूटीसी के पूर्व (जैसे कि "सीईटी" के रूप में) क्षेत्र के संक्षिप्त नाम लौटने।

type Location

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

एक स्थान उस समय प्रयोग में क्षेत्र के लिए समय instants मैप करता है। आमतौर पर, स्थान में समय-समय पर संग्रह का प्रतिनिधित्व करता है जो भौगोलिक क्षेत्र में उपयोग करता है, जैसे केंद्रीय यूरोप के लिए सीईएसटी और सीईटी।

var Local *Location = &localLoc 

स्थानीय सिस्टम के स्थानीय समय क्षेत्र का प्रतिनिधित्व करता है।

var UTC *Location = &utcLoc 

यूटीसी यूनिवर्सल कोऑर्डिनेटेड टाइम (यूटीसी) का प्रतिनिधित्व करता है।

func (Time) In

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

loc करने के लिए सेट स्थान जानकारी के साथ रिटर्न टी में।

पैनिक्स में यदि लोक शून्य है।

उदाहरण के लिए,

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)) 
} 
संबंधित मुद्दे

 संबंधित मुद्दे