Thao tác ngày giờ trong ứng dụng Go
Ngày và giờ là thành phần quan trọng của rất nhiều phần mềm, từ các tiện ích quản lý thời gian đến các ứng dụng web. Là một lập trình viên, bạn cần biết cách điều khiển thời gian và ngày tháng bằng bất kỳ ngôn ngữ nào bạn sử dụng.
Trong cờ vây, thời gian gói gói các chức năng để thao tác thời gian và ngày tháng. Bạn có thể truy cập các chức năng này trong bất kỳ tệp nguồn nào bằng cách nhập gói đó.
Vậy, thao tác thời gian và ngày tháng có nghĩa là gì, và làm thế nào bạn có thể thao tác thời gian và ngày tháng trong Go?
Mục Lục
Thao tác Ngày và Giờ là gì?
Theo yêu cầu của chương trình của bạn, chương trình có thể cần kiểm soát, quản lý hoặc điều chỉnh hành vi hoặc biểu diễn thời gian và ngày tháng.
Các ngôn ngữ lập trình khác nhau có các chức năng riêng để thao tác thời gian và ngày tháng. Ngôn ngữ cờ vây có nhiều khả năng, hữu ích cho mục đích này.
Thao tác thời gian và ngày tháng có thể bao gồm:
- Lấy thời gian hiện tại của một vị trí hoặc múi giờ.
- Thực hiện các phép tính số học về thời gian và ngày tháng.
- Thay đổi định dạng đầu vào / đầu ra của thời gian và ngày tháng.
Để bắt đầu thao tác thời gian và ngày tháng trong các ứng dụng Go của bạn, hãy nhập thời gian gói cùng với các gói khác mà bạn đang sử dụng.
import (
"fmt"
"time"
)
Làm thế nào để có được ngày và giờ hiện tại trong khi di chuyển
Một trường hợp sử dụng phổ biến cho thao tác thời gian là lấy giờ địa phương hiện tại hoặc thời gian hiện tại của múi giờ hoặc vị trí cụ thể.
Để biết ngày và giờ theo giờ địa phương của bạn hoặc trong múi giờ hoặc vị trí cụ thể, bạn có thể sử dụng Hiện tại() và time.LoadLocation () chức năng:
func main() {
myTime := ime.Now()
fmt.Println("Current time in ", myTime.Location(), " is: ", myTime)
location, _ := time.LoadLocation("Local") // or time.LoadLocation("")
fmt.Println("Current time in ", location, " is: ", time.Now().In(location))
location, _ = time.LoadLocation("America/New_York")
fmt.Println("Current time in ", location, " is: ", myTime.In(location))
location, _ = time.LoadLocation("MST")
fmt.Println("Current time in ", location, " is: ", myTime.In(location))
}
Chạy chương trình trên với chạy filename.go tạo ra đầu ra sau trong thiết bị đầu cuối:
Phương thức LoadLocation không hỗ trợ mọi chữ viết tắt của vị trí và múi giờ. Theo tài liệu Go, nó chỉ hỗ trợ các vị trí trong cơ sở dữ liệu IANA.org.
Cách nhận các thành phần riêng biệt từ một ngày nhất định
Bạn có thể lấy từng thành phần của dấu thời gian một cách riêng biệt, tương tự như khi làm việc với thời gian và ngày tháng trong JavaScript.
Có nhiều cách để thực hiện điều này bằng cách sử dụng Go’s thời gian chức năng. Phần này minh họa từng phương pháp.
Bạn có thể dùng Ngày() chức năng lấy ngày, tháng, năm và Cái đồng hồ() chức năng lấy giờ, phút và giây. Ví dụ:
func main() {
myTime := time.Now();
year, month, day := myTime.Date()
fmt.Println("Year :", year)
fmt.Println("Month :", month)
fmt.Println("Day :", day)hour, min, sec := myTime.Clock()
fmt.Println("Hour :", hour)
fmt.Println("Minute :", min)
fmt.Println("Seconds :", sec)
}
Đầu ra minh họa các phần khác nhau của dấu thời gian:
Bạn cũng có thể nhận các đơn vị của dấu thời gian riêng lẻ với thời gian các chức năng cho mỗi người trong số họ:
func main() {
myTime := time.Now()
fmt.Println("Year :", myTime.Year())
fmt.Println("Month :", myTime.Month())
fmt.Println("Day :", myTime.Day())
fmt.Println("Hour :", myTime.Hour())
fmt.Println("Minute :", myTime.Minute())
fmt.Println("Seconds :", myTime.Second())
fmt.Println("Nanosecond :", myTime.Nanosecond())
}
Như đầu ra minh họa, điều này cũng cung cấp cho bạn quyền truy cập vào nano giây:
Các ví dụ cho đến thời điểm này đã tập trung vào việc lấy các đơn vị dấu thời gian từ thời điểm hiện tại. Bạn có thể thực hiện các loại hành động tương tự trên một dấu thời gian không Hiện tại().
Bạn có thể trích xuất năm, tháng, ngày, giờ, phút và giây của một ngày nhất định. Để làm như vậy, bạn phải khởi tạo một đối tượng ngày tháng mới hoặc phân tích cú pháp ngày từ một chuỗi:
func main() {
yourTime := time.Date(2020, 07, 1, 06, 32, 10, 0, time.UTC)
fmt.Println("Year :", yourTime.Year())
fmt.Println("Month :", yourTime.Month())
fmt.Println("Day :", yourTime.Day())
fmt.Println("Hour :", yourTime.Hour())
fmt.Println("Minute :", yourTime.Minute())
fmt.Println("Seconds :", yourTime.Second())
fmt.Println("Nanosecond :", yourTime.Nanosecond())
yourHour, yourMin, yourSec := yourTime.Clock()
fmt.Println("Hour :", yourHour)
fmt.Println("Minute :", yourMin)
fmt.Println("Seconds :", yourSec)
dateString := "2020-07-01 06:32:10"
layout := "2006-01-02 15:04:05"
yourTime, _ = time.Parse(layout, dateString)
fmt.Println("Your time is: ", yourTime)
fmt.Println("Year :", yourTime.Year())
fmt.Println("Month :", yourTime.Month())
fmt.Println("Day :", yourTime.Day())
fmt.Println("Hour :", yourTime.Hour())
fmt.Println("Minute :", yourTime.Minute())
fmt.Println("Seconds :", yourTime.Second())
}
Mã này tạo ra kết quả sau:
Lưu ý rằng Parse () sử dụng UTC theo mặc định nếu bạn không chỉ định múi giờ trong chuỗi ngày.
Cách thực hiện các phép toán số học với ngày và giờ
Các phép toán số học là một loại thao tác khác mà bạn có thể thực hiện vào ngày và giờ trong cờ vây. Các phép toán đơn giản như cộng, trừ và chênh lệch thời gian đều có thể thực hiện được.
Go cho phép bạn xác định khoảng thời gian giá trị với tất cả các đơn vị thời gian từ thời gian. đến thời gian. giây thứ hai. Bạn có thể sử dụng các giá trị này để thêm hoặc bớt thời gian bằng cách sử dụng Cộng(). Ngoài ra còn có một AddDate () hàm nhận 3 tham số: năm, tháng và ngày để thực hiện phép cộng hoặc phép trừ.
Đoạn mã sau minh họa việc sử dụng các chức năng này:
func main() {
curTime := time.Now()
curTime = curTime.Add(time.Hour)
fmt.Println("Current time is: ", curTime)
tomorrow := curTime.Add(time.Hour * 24)
fmt.Println("This time tomorrow is: ", tomorrow)
nextWeek := curTime.Add(time.Hour * 24 * 7)
fmt.Println("This time next week is: ", nextWeek)
nextTomorrow := curTime.AddDate(0, 0, 2)
fmt.Println("This time Next tomorrow is: ", nextTomorrow)
nextMonth := curTime.AddDate(0, 1, 0)
fmt.Println("This time next month is: ", nextMonth)
fiveYearsAndOneMonthAfter := curTime.AddDate(5, 1, 0)
fmt.Println("This time five years and one month after is: ", fiveYearsAndOneMonthAfter)
}
Cái nào tạo ra sản lượng sau:
Bạn cũng có thể trừ thời gian bằng Cộng() và AddDate () bằng cách truyền các tham số âm. Ví dụ:
func main() {
curTime := time.Now()
yesterday := curTime.AddDate(0, 0, -1)
fmt.Println("This time yesterday was: ", yesterday)
lastMonth := curTime.Add(time.Hour * -24 * 30)
fmt.Println("This time last month was: ", lastMonth)
}
Tạo ra đầu ra này:
Mặc dù bạn có thể sử dụng Cộng() và AddDate () để tìm ra sự khác biệt giữa các ngày, Go có Sub () hàm hoạt động hơi khác một chút:
func main() {
curTime = time.Now()
past := time.Date(2022, time.December, 25, 12, 0, 0, 0, time.UTC)
diff := past.Sub(curTime)
fmt.Println("Difference between now and the past is: ", diff)
years := int(diff.Hours() / 24 / 365)
fmt.Println("Years: ", years)
months := int(diff.Hours() / 24 / 30)
fmt.Println("Months: ", months)
days := int(diff.Hours() / 24)
fmt.Println("Days: ", days)
hours := int(diff.Hours())
fmt.Println("Hours: ", hours)
}
Mã này tạo ra kết quả sau:
Cách lấy ngày giờ ở nhiều định dạng khác nhau
Bạn cũng có thể nhận được kết quả ngày và giờ ở nhiều định dạng bằng cách sử dụng Định dạng() hàm số. Dưới đây là một số kiểu định dạng phổ biến:
func main() {
curTime = time.Now()
fmt.Println("Current time is: ", curTime)
fmt.Println("Current time in RFC3339 format is: ", curTime.Format(time.RFC3339))
fmt.Println("Current time in RFC3339Nano format is: ", curTime.Format(time.RFC3339Nano))
fmt.Println("Current time in RFC1123 format is: ", curTime.Format(time.RFC1123))
fmt.Println("Current time in RFC1123Z format is: ", curTime.Format(time.RFC1123Z))
fmt.Println("Current time in RFC822 format is: ", curTime.Format(time.RFC822))
fmt.Println("Current time in RFC822Z format is: ", curTime.Format(time.RFC822Z))
fmt.Println("Current time in RFC850 format is: ", curTime.Format(time.RFC850))
fmt.Println("Current time in ANSIC format is: ", curTime.Format(time.ANSIC))
fmt.Println("Current time in Unix format is: ", curTime.Format(time.UnixDate))
fmt.Println("Current time in custom format is: ", curTime.Format("02-01-2006 15:04:05"))
fmt.Println("Current time in custom format is: ", curTime.Format("01-02-2006 15:04:05"))
fmt.Println("Current time in custom format is: ", curTime.Format("2006-01-02 15:04:05"))
fmt.Println("Current time in custom format is: ", curTime.Format("02.01.2006"))
fmt.Println("Current time in custom format is: ", curTime.Format("02/01/2006"))
fmt.Println("Current time in custom format is: ", curTime.Format("02 Jan 2006"))
fmt.Println("Current time in custom format is: ", curTime.Format("02 February 2006 Monday"))
fmt.Println("Current time in custom format is: ", curTime.Format("02 February 2006 Mon 15:04:05"))
}
Các kiểu định dạng khác nhau này tạo ra kết quả sau:
Thao tác với thời gian và ngày tháng trong khi di chuyển
Danh sách các thao tác mà bạn có thể thực hiện vào thời gian và ngày tháng gần như không có hồi kết. Tùy thuộc vào phạm vi ứng dụng của bạn, bạn có thể cần thực hiện nhiều thao tác ngày / giờ đa dạng.
Đối với bất kỳ trường hợp sử dụng nào bạn có thể có, thời gian gói rất chức năng và có nhiều phương thức tích hợp.
Bạn có thể sử dụng thao tác ngày và giờ để tạo một ứng dụng lập kế hoạch hàng ngày hoặc công việc đơn giản.