Временске зоне су кључне за сваку апликацију која се бави датумима и временима. Наравно, ово посебно важи за апликације које служе корисницима на свим континентима и на локацијама. Временске зоне одређују помак од универзалног координираног времена (УТЦ) за одређене локације широм света. Они играју виталну улогу у обезбеђивању тачног и поузданог управљања временом.
Го обезбеђује временски пакет у својој стандардној библиотеци за рад са временом и временским зонама. Можете преузети и претворити временске зоне на различитим локацијама користећи временски пакет.
Временски пакет
Тхе време пакет пружа функционалност за рад са временима и датумима, мерење и приказивање времена и манипулисање датумима помоћу грегоријанског календара без преступних секунди.
Временски пакет пружа а времетип структуре који садржи поље локације које можете користити за постављање временских зона.
Можете да увезете временски пакет са наредбом за увоз.
увоз"време"
Ево типа временске структуре и њених поља. Поља су неизвезена, тако да их нема у званичној документацији.
пакет главни
тип време струцт {
// зид је време на зиду у формату који враћа рунтиме.нанотиме()
// функција.
зид уинт64// ект је монотоно очитавање сата у формату који враћа
// рунтиме.нанотиме().
ект инт64// лоц је показивач на структуру локације која је повезана са овим временом.
лоц *Локација
}тип Локација струцт {
// наме је назив временске зоне, као што је "УТЦ" или "ПСТ".
име низ// зона садржи информације о скраћеници временске зоне, померању,
// и правило за једну временску зону на локацији.
зона []зона// тк садржи информације о томе када је скраћеница временске зоне или
// измене померања за локацију.
тк []зонеТранс// прошири садржи име родитељске временске зоне ако је ова локација
// се протеже од другог.
проширити низ// цацхеСтарт и цацхеЕнд су Уник временске ознаке које одређују опсег
// за које је поље цацхеЗоне важеће.
цацхеСтарт инт64
цацхеЕнд инт64
// цацхеЗоне указује на зону која је тренутно важећа за то време
// опсег дефинисан цацхеСтарт и цацхеЕнд.
цацхеЗоне *зона
}
Многе методе користе Време и Локација структуре, укључујући методе временске зоне.
Учитавање информација о временској зони
Учитавање информација о временској зони је једна од основних операција при раду са временским зонама. Тхе ЛоадЛоцатион метода пружа функционалност за учитавање информација о временској зони из ИАНА база података о временским зонама. Тхе ЛоадЛоцатион метода узима име временске зоне и враћа информације о локацији и грешку за руковање. Када учита информације о временској зони, креира а време инстанца структуре повезана са временском зоном.
увоз (
"фмт"
"време"
)фунцглавни() {
// Учитај локацију временске зоне за Америца/Нев_Иорк
лоц, ерр := време. ЛоадЛоцатион(„Америка/Њу_Јорк“)ако ерр != нула {
фмт. Принтлн(„Грешка при учитавању локације:“, грешка)
повратак
}
// Добијате тренутно време на локацији
сада := време. Сада().У (лоц)
фмт. Принтлн(„Тренутно време у Њујорку:“, Сада)
}
Тхе У методом Сада функција узима локацију и тамо исписује време:
Поред тога, можете користити ФикедЗоне метод за учитавање тренутног времена на локацији ако знате стринг локације и помак временске зоне од УТЦ. Прво, мораћете да учитате тренутно време у УТЦ, а затим ћете користити ФикедЗоне метод да учитате локација заснована на низу и померању пре прослеђивања локације у методу времена инстанце.
увоз (
"фмт"
"време"
)фунцглавни() {
// Добијате тренутно време у УТЦ
сада := време. Сада().УТЦ()// Подесите временску зону за Лагос
лагос := сада. На време. Фиксна зона("ВАТ", 3600))
// Штампа тренутно време на обе локације
фмт. Принтлн(„Тренутно време у Лагосу:“, лагос)
}
Тхе главни функција штампа тренутно време у Лагосу на конзолу.
Мерење трајања временске зоне
Временски пакет обезбеђује Зона метод за преузимање скраћенице и померања временске зоне повезане са а време. време вредност. Метод Зоне враћа стринг који представља скраћеницу временске зоне (нпр. „ЕСТ“ за „Америца/Нев_Иорк“) и цео број који представља број секунди источно од УТЦ.
увоз (
"фмт"
"време"
)фунцглавни() {
// Учитај локацију временске зоне за Америца/Нев_Иорк
лоц, ерр := време. ЛоадЛоцатион(„Америка/Њу_Јорк“)ако ерр != нула {
фмт. Принтлн(„Грешка при учитавању локације:“, грешка)
повратак
}// Добијате тренутно време у УТЦ и наведену локацију
т1 := време. Сада()
т2 := т1.Ин (лоц)// Добијте помак у секундама за сваку временску зону
//за временске зоне
_, оффсет1 := т1.Зоне()
_, оффсет2 := т2.Зоне()// Израчунај трајање промене временске зоне
// између УТЦ и Америца/Нев_Иорк
трајање := оффсет2 - оффсет1
фмт. Принтф(„Трајање промене временске зоне“ +
" између УТЦ и Њујорка је: %д секунди", трајање)
}
У главној функцији, метода Зоне мери трајање промене временске зоне између две временске зоне (време. Временске вредности). Тхе т1 променљива је тренутно време у УТЦ, а т2 променљива је тренутно време у временској зони "Америца/Нев_Иорк".
Функција штампа трајање променљива (разлика у офсету између временских зона) која представља померање временске зоне у секундама.
Процена времена између временских зона
Можете проценити време између временских зона ако знате трајање између временских зона. Можете користити Додати метода У методу вашег времена. Инстанца структуре времена за додавање трајања времену у временској зони.
увоз (
"Пријава"
"време"// увоз временског пакета
)фунцевалуатеТиме(т време. Време, време трајања. Трајање)време.време {
// учитавање локације за Африку/Лагос
локација, грешка := време. ЛоадЛоцатион(„Африка/Лагос“)
ако ерр != нула {
Пријава. Принтлн(„Дошло је до грешке при учитавању локације“)
}
повратак т. У (локација).Додај (трајање)
}
Тхе евалуатеТиме функција одузима време. Временска инстанца и трајање типа време. Трајање, враћајући време у временској зони. Учитава тренутно време у „Африка/Лагос“ и додаје време трајања.
Манипулишите временом и датумом помоћу временског пакета
Временски пакет је веома разноврстан за рад и са временом и са датумима. Пакет времена пружа функције као што су Уник() за претварање времена у Уник време, Слееп() за паузирање горутина и Формат() за форматирање временских вредности у стринг.