Часът и датата са ключови компоненти на много софтуер, от помощните програми за управление на времето до уеб приложенията. Като програмист трябва да знаете как да манипулирате часа и датата на какъвто и език да използвате.

В Go, време Пакетът обединява функциите за манипулиране на час и дата. Можете да получите достъп до тези функции във всеки изходен файл, като импортирате този пакет.

И така, какво означава да манипулирате час и дата и как можете да манипулирате час и дата в Go?

Какво е манипулиране на час и дата?

Според изискванията на вашата програма може да се наложи да контролира, управлява или коригира поведението или представянето на часове и дати.

Различни езици за програмиране имат свои собствени функции за манипулиране на час и дата. Езикът Go има широки възможности, полезни за тази цел.

Манипулирането на час и дата може да включва:

  • Получаване на текущото време на местоположение или часова зона.
  • Извършване на аритметични операции върху часове и дати.
  • Промяна на входно/изходния формат на часове и дати.
instagram viewer

За да започнете да манипулирате часа и датата във вашите Go приложения, импортирайте време пакет заедно с другите пакети, които използвате.

импортиране (
"fmt"
"време"
)

Как да получите текущия час и дата в Go

Често използван случай за манипулиране на времето е получаването на текущото местно време или текущото време на определена часова зона или местоположение.

За да получите часа и датата във вашето местно време или в определена часова зона или местоположение, можете да използвате време. Сега() и време. LoadLocation() функции:

функ основен(){
// Вземете текущия час и дата в местно време
myTime := име. Сега()
fmt. Println("Текущо време в ", myTime. Местоположение(), " е: ", myTime)

// Друг начин да получите местно време
местоположение, _ := време. LoadLocation("Местен") // или време. LoadLocation("")
fmt. Println("Текущо време в ", местоположение, " е: ", време. Сега().В (местоположение))

// друго местоположение
местоположение, _ = време. LoadLocation("Америка/Ню_Йорк")
fmt. Println("Текущо време в ", местоположение, " е: ", myTime. В (местоположение))

// вземете текущото време в планинската часова зона (MST)
местоположение, _ = време. LoadLocation("MST")
fmt. Println("Текущо време в ", местоположение, " е: ", myTime. В (местоположение))
}

Изпълнение на програмата по-горе с стартирайте filename.go произвежда следния изход в терминала:

Методът LoadLocation не поддържа всяко съкращение на местоположение и часова зона. Според Отидете на документация, той поддържа само местоположения в База данни на IANA.org.

Как да получите отделни компоненти от дадена дата

Можете да получите всеки компонент на клеймото поотделно, което е подобно на кога работа с час и дати в JavaScript.

Има много начини да постигнете това с помощта на Go време функции. Този раздел илюстрира всеки метод.

Можете да използвате Дата() функция за получаване на ден, месец и година, и Часовник() функция за получаване на час, минута и секунди. Например:

функосновен() {
myTime := време. Сега();
година, месец, ден := myTime. Дата()
fmt. Println("Година :", година)
fmt. Println("Месец :", месец)
fmt. Println("Ден :", ден)

час, мин., сек. := myTime. Часовник()
fmt. Println("Час :", час)
fmt. Println("Минута :", мин.)
fmt. Println("Секунди :", сек)
}

Резултатът илюстрира различните части на клеймото за време:

Можете също така да получите единици от времевия печат поотделно с време функции за всеки от тях:

функосновен() {
myTime := време. Сега()

// вземете всяка единица от година до наносекунда
fmt. Println("Година :", myTime. година())
fmt. Println("Месец :", myTime. месец())
fmt. Println("Ден :", myTime. Ден())
fmt. Println("Час :", myTime. час())
fmt. Println("Минута :", myTime. минута())
fmt. Println("Секунди :", myTime. Второ ())
fmt. Println("Наносекунда :", myTime. Наносекунда())
}

Както показва изходът, това също ви дава достъп до наносекунди:

Примерите до този момент се фокусираха върху получаване на единици времеви клейма от текущото време. Можете да извършвате същите видове действия върху клеймо за време, което не е време. Сега().

Можете да извлечете годината, месеца, деня, часа, минутата и секундата от дадена дата. За да направите това, трябва или да инициализирате нов обект за дата, или да анализирате датата от низ:

функосновен() {
// получаване на отделни компоненти на времето от година до наносекунда
// от определена дата
yourTime := време. Дата(2020, 07, 1, 06, 32, 10, 0, време. UTC)
fmt. Println("Година :", вашето време. година())
fmt. Println("Месец :", вашето време. месец())
fmt. Println("Ден :", вашето време. Ден())
fmt. Println("Час :", вашето време. час())
fmt. Println("Минута :", вашето време. минута())
fmt. Println("Секунди :", вашето време. Второ ())
fmt. Println("Наносекунда :", вашето време. Наносекунда())
// използване на функцията Clock() за получаване на час, минута и секунда
yourHour, yourMin, yourSec := yourTime. Часовник()
fmt. Println("Час :", вашият час)
fmt. Println("Минута :", yourMin)
fmt. Println("Секунди :", yourSec)

// получаваме час и дата от низ
dateString := "2020-07-0106:32:10"
оформление := "2006-01-0215:04:05" // желаният от вас изходен формат
yourTime, _ = време. Анализ (оформление, dateString)
fmt. Println("Вашето време е: ", вашето време)
fmt. Println("Година :", вашето време. година())
fmt. Println("Месец :", вашето време. месец())
fmt. Println("Ден :", вашето време. Ден())
fmt. Println("Час :", вашето време. час())
fmt. Println("Минута :", вашето време. минута())
fmt. Println("Секунди :", вашето време. Второ ())
}

Този код произвежда следния изход:

Имайте предвид, че Parse() използва UTC по подразбиране, ако не посочите часова зона в низа за дата.

Как да извършваме аритметични операции с дата и час

Аритметичните операции са друг вид манипулация, която можете да извършите върху час и дата в Go. Всички прости операции като събиране, изваждане и времева разлика са възможни.

Go ви позволява да дефинирате време. Продължителност стойности с всички единици за време от време. час да се време. Наносекунда. Можете да използвате тези стойности, за да добавяте или изваждате време, използвайки Добавяне(). Има и един AddDate() функция, която приема 3 параметъра: години, месеци и дни за извършване на събиране или изваждане.

Следният код демонстрира използването на тези функции:

функосновен() {
curTime := време. Сега()
curTime = curTime. Добавете (време. час) // добавя един час
fmt. Println("Текущият час е: ", curTime)
утре := curTime. Добавете (време. час * 24)
fmt. Println("Този час утре е: ", утре)
следващата седмица := curTime. Добавете (време. час * 24 * 7)
fmt. Println("Това време следващата седмица е: ", nextWeek)

// използвайки AddDate (y, m, d)
nextTomorrow := curTime. AddDate(0, 0, 2)
fmt. Println("Този път следващия утре е: ", nextTomorrow)
nextMonth := curTime. AddDate(0, 1, 0)
fmt. Println("Този час следващия месец е: ", nextMonth)
fiveYearsAndOneMonthAfter := curTime. AddDate(5, 1, 0)
fmt. Println("Този път след пет години и един месец е: ", fiveYearsAndOneMonthAfter)
}

Което произвежда следния изход:

Можете също да извадите времето с Добавяне() и AddDate() чрез предаване на отрицателни параметри. Например:

функосновен() {
curTime := време. Сега()

// извадете един ден с помощта на AddDate()
вчера := curTime. AddDate(0, 0, -1)
fmt. Println("Този път вчера беше: ", вчера)

// извадете един месец с помощта на Add()
lastMonth := curTime. Добавете (време. час * -24 * 30)
fmt. Println("Този път миналия месец беше: ", lastMonth)
}

Произвежда този изход:

Въпреки че можете да използвате Добавяне() и AddDate() за да открие разликата между датите, Go има a Под() функция, която работи малко по-различно:

функосновен() {
curTime = време. Сега()
минало := време. Дата(2022, време. декември, 25, 12, 0, 0, 0, време. UTC)
diff := минало. Под (curTime)
fmt. Println("Разликата между сега и миналото е: ", разл.)
// получаваме разликата в различни единици
години := вътр(разл. Часа() / 24 / 365)
fmt. Println("Години: ", години)
месеца := вътр(разл. Часа() / 24 / 30)
fmt. Println("Месеци: ", месеци)
дни := вътр(разл. Часа() / 24)
fmt. Println("Дни: ", дни)
часа := вътр(разл. Часа())
fmt. Println("Часове: ", часове)
// разл. Минути(), разл. Секунди(), разл. Милисекунди(), разл. Nanoseconds() също връща техните единици
}

Този код произвежда следния изход:

Как да получите час и дата в различни формати

Можете също да получите изходни данни за час и дата в различни формати, като използвате формат() функция. Ето някои често срещани стилове за форматиране:

функосновен() {
curTime = време. Сега()
// вградени стандартни стилове за форматиране
fmt. Println("Текущият час е: ", curTime)
fmt. Println("Текущото време във формат RFC3339 е: ", curTime. Формат (време. RFC3339))
fmt. Println("Текущото време във формат RFC3339Nano е: ", curTime. Формат (време. RFC3339Nano))
fmt. Println("Текущото време във формат RFC1123 е: ", curTime. Формат (време. RFC1123))
fmt. Println("Текущото време във формат RFC1123Z е: ", curTime. Формат (време. RFC1123Z))
fmt. Println("Текущото време във формат RFC822 е: ", curTime. Формат (време. RFC822))
fmt. Println("Текущото време във формат RFC822Z е: ", curTime. Формат (време. RFC822Z))
fmt. Println("Текущото време във формат RFC850 е: ", curTime. Формат (време. RFC850))
fmt. Println("Текущото време във формат ANSIC е: ", curTime. Формат (време. ANSIC))
fmt. Println("Текущото време в Unix формат е: ", curTime. Формат (време. UnixDate))
// персонализирани стилове за форматиране
// ДД-ММ-ГГГГ ЧЧ: ММ: СС
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02-01-200615:04:05"))
// ММ-ДД-ГГГГ ЧЧ: ММ: СС
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("01-02-200615:04:05"))
// ГГГГ-ММ-ДД ЧЧ: ММ: СС
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("2006-01-0215:04:05"))
// ДД.ММ.ГГГГ
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02.01.2006"))
// ДД/ММ/ГГГГ
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02/01/2006"))
// 01 февруари 2006 г
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02 януари 2006"))
// 01 февруари 2006 г. понеделник
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02 февруари 2006 понеделник"))
// 01 февруари 2006 Mon 15:04:05
fmt. Println("Текущият час в потребителски формат е: ", curTime. формат ("02 февруари 2006 пн 15:04:05"))
}

Тези различни типове форматиране произвеждат следния резултат:

Манипулиране на час и дата в Go

Списъкът с манипулации, които можете да извършвате на часове и дати, е почти безкраен. В зависимост от обхвата на вашето приложение може да се наложи да извършите много различни операции с дата/час.

За всеки случай на употреба, който може да имате, време пакетът е много функционален и има много вградени методи.

Можете да използвате манипулиране на дата и час, за да изградите прост дневен плановик или приложение за планиране на задачи.