Zamanı Formatlama
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 60 / 68.
Bir time.Time nesnesine sahip olduğunuzda, onu genellikle okunabilir bir dize formatına dönüştürmeniz gerekecektir. Go, diğer programlama dillerinden farklı, zaman biçimlendirme konusunda benzersiz bir yaklaşım kullanır.
%Y-%m-%d gibi format kodlarını kullanmak yerine, Go bir şablon olarak bir referans tarihi kullanır. Bu referans tarihi, tam olarak şu anı temsil eden Mon Jan 2 15:04:05 MST 2006 değeridir: 2 Ocak 2006, saat 15:04:05 Dağ Standart Saati.
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Çıktı: 2023-10-26Temel fikir, referans tarih bileşenlerini istediğiniz düzende düzenlemenizdir. Bir YYYY-MM-DD formatı için "2006-01-02" kullanırsınız çünkü referans tarih o düzende bu şekilde görünür. Jan 2, 2006 gibi farklı bir format için "Jan 2, 2006" kullanırsınız.
Bu düzen tabanlı yaklaşım, Go'nun zaman biçimlendirmesini hem akılda kalıcı hem de esnek hale getirir. Referans tarihini bir kez hatırladığınızda, bileşenlerini istediğiniz düzende düzenleyerek herhangi bir biçim oluşturabilirsiniz.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayGo'nin benzersiz referans tarih düzeni (layout) sistemini kullanarak time.Time nesnelerini biçimlendiren çok formatlı bir tarih ve saat görüntüleme sistemi oluşturun. Bu zorluk, çeşitli tarih ve saat gösterimleri oluşturmak için farklı düzen kalıplarıyla Format metodunu kullanma yeteneğinizi test edecektir.
İki girdi alacaksınız:
"year:month:day:hour:minute"formatında tarih bilgilerini içeren bir dize (örneğin,"2023:12:25:14:30")"format1,format2,format3"formatında virgülle ayrılmış format isteklerini içeren bir dize (örneğin,"iso,american,european,time12,time24")
Göreviniz şunları yapmaktır:
- Yıl, ay, gün, saat ve dakika değerlerini ayıklamak için ilk girdiyi iki nokta üst üste karakterlerinden bölerek ayrıştırın
- Bu dize değerlerini
strconvpaketini kullanarak tam sayılara dönüştürün - Ayrıştırılan değerlerle
time.Datekullanarak birtime.Timenesnesi oluşturun (konum içintime.UTC, saniye ve nanosaniye için 0 kullanın) - Uygulama başlığını görüntüleyin:
"=== DATE/TIME FORMATTER ===" - Kaynak zamanı görüntüleyin:
"Source time: [complete_time_object]" - Format isteklerini almak için ikinci girdiyi virgüllerden bölerek ayrıştırın
- Biçimlendirme başlığını görüntüleyin:
"Formatted outputs:" - Her format isteği için,
Formatmetodu ile uygun düzen (layout) dizesini kullanın:"iso"için:"2006-01-02"düzenini kullanın ve"ISO format: [formatted_result]"yazdırın"american"için:"01/02/2006"düzenini kullanın ve"American format: [formatted_result]"yazdırın"european"için:"02/01/2006"düzenini kullanın ve"European format: [formatted_result]"yazdırın"long"için:"January 2, 2006"düzenini kullanın ve"Long format: [formatted_result]"yazdırın"time12"için:"3:04 PM"düzenini kullanın ve"12-hour time: [formatted_result]"yazdırın"time24"için:"15:04"düzenini kullanın ve"24-hour time: [formatted_result]"yazdırın"full"için:"Monday, January 2, 2006 at 3:04 PM"düzenini kullanın ve"Full format: [formatted_result]"yazdırın"compact"için:"20060102"düzenini kullanın ve"Compact format: [formatted_result]"yazdırın
- İstatistikleri hesaplayın ve görüntüleyin:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- Referans bilgilerini görüntüleyin:
"=== REFERENCE DATE INFO ===""Go uses reference date: Mon Jan 2 15:04:05 MST 2006""This represents: January 2nd, 2006 at 3:04:05 PM""Layout patterns arrange these components as needed"
- Tamamlanma mesajını görüntüleyin:
"Date formatting completed using Go's layout system"
Zaman işlemleri için time paketini, girdi dizelerini bölmek için strings paketini, dizeleri tam sayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullanın. Go'nun tarih biçimlendirmesinin Mon Jan 2 15:04:05 MST 2006 referans tarihini bir şablon olarak kullandığını ve bu bileşenleri istediğiniz düzende düzenlediğinizi unutmayın. Bu zorluk, aynı zaman nesnesine birden fazla farklı format kalıbı uygulamanızı sağlayarak Go'nun benzersiz düzen tabanlı biçimlendirme sisteminin nasıl çalıştığını gösterir.
Kopya kağıdı
Go, zaman biçimlendirme için benzersiz bir referans tarihi yaklaşımı kullanır: Mon Jan 2 15:04:05 MST 2006
Bir time.Time nesnesini biçimlendirmek için, referans tarihini temel alan düzen desenleriyle Format metodunu kullanın:
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Çıktı: 2023-10-26Yaygın düzen desenleri:
"2006-01-02"- ISO formatı (YYYY-AA-GG)"01/02/2006"- Amerikan formatı (AA/GG/YYYY)"02/01/2006"- Avrupa formatı (GG/AA/YYYY)"January 2, 2006"- Uzun format"3:04 PM"- 12 saatlik zaman"15:04"- 24 saatlik zaman"Monday, January 2, 2006 at 3:04 PM"- Tam format"20060102"- Sıkıştırılmış format
İşin püf noktası, referans tarihi bileşenlerini istediğiniz desende düzenlemektir.
Kendin dene
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Girdiyi oku
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// Tarih bileşenlerini iki nokta üst üste işaretine göre ayırarak ayrıştır
dateComponents := strings.Split(dateInput, ":")
// Dize bileşenlerini tam sayılara dönüştür
year, _ := strconv.Atoi(dateComponents[0])
month, _ := strconv.Atoi(dateComponents[1])
day, _ := strconv.Atoi(dateComponents[2])
hour, _ := strconv.Atoi(dateComponents[3])
minute, _ := strconv.Atoi(dateComponents[4])
// time.Time nesnesi oluştur
sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
// Format isteklerini ayrıştır
formatRequests := strings.Split(formatInput, ",")
// TODO: Kodunuzu aşağıya yazın
// Uygulama başlığını görüntüle
// Kaynak zamanı görüntüle
// Her bir format isteğini işle ve formatlanmış çıktıları görüntüle
// İstatistikleri hesapla ve görüntüle
// Referans bilgilerini görüntüle
// Tamamlanma mesajını görüntüle
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar