2015-04-02 2 views
-2

Я работаю над примером Голанга, который требует некоторых расчетов даты. Я скорее надеялся, что Go предоставит некоторые красивые библиотеки дат, похожие на отличный модуль Python datetime, но это, похоже, не так.Расчет дельт между двумя датами по годам, дням, часам, минутам и т. Д.

Как я могу представить этот пример python в Go?

from datetime import date 

d0 = date(2013, 8, 18) 
d1 = date(2018, 9, 26) 
delta = d0 - d1 
print delta.days 
>>-1865 

я провел справедливое немного времени озираясь о том, как сделать это, я не могу найти окончательный ответ, который является ясным и кратким и без оговорок, таких как не правильно расчета високосных лет и т.д.

Это, по-видимому, довольно большое ограничение на то, что становится отличным небольшим языком для создания прототипов кросс-платформы и в конечном итоге производственных приложений.

ответ

2

Я не знаю, как вы потратили свое время на поиск и ничего не нашли, но в пакете стандартной библиотеки есть все, что вы хотите.

Вот ваш пример закодированы в Go:

d0 := time.Date(2013, 8, 18, 0, 0, 0, 0, time.UTC) 
d1 := time.Date(2018, 9, 26, 0, 0, 0, 0, time.UTC) 

delta := d0.Sub(d1) 

fmt.Println(delta.Hours()/24) 

выход (как и ожидалось):

-1865 

Попробуйте на Go Playground.

+0

Хм, приятно спасибо. Не могу поверить, что я пропустил это. Существует ли 'time.strptime (строка [, format]), например. 'time.strptime ('11/24/2013 ',"% m /% d /% Y ")' эквивалентно? – user1513388

+0

@ user1513388 Да, есть. Проверьте функцию ['time.Parse()'] (http://golang.org/pkg/time/#Parse). – icza

+0

Спасибо, я просто пытался это сделать. Я столкнулся с этой проблемой, хотя при попытке разобрать даты вроде этого «24/11/2013» или это «11/24/2013» http://stackoverflow.com/questions/14106541/go-parsing- даты-строки, которые являются нестандартными форматами, хотя это довольно запутанно. – user1513388

Смежные вопросы