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.
Görev
KolayGo'nun benzersiz referans tarih düzeni sistemini kullanarak time.Time nesnelerini biçimlendiren çok biçimli bir tarih ve saat görüntüleme sistemi oluşturun. Bu görev, çeşitli tarih ve saat gösterimleri oluşturmak için farklı düzen kalıplarıyla Format yöntemini kullanma becerinizi sınayacaktır.
İki girdi alacaksınız:
"year:month:day:hour:minute"biçiminde tarih bilgilerini içeren bir dize (örneğin,"2023:12:25:14:30")"format1,format2,format3"biçiminde, virgüllerle ayrılmış biçim isteklerini içeren bir dize (örneğin,"iso,american,european,time12,time24")
Göreviniz:
- Yıl, ay, gün, saat ve dakika değerlerini çıkarmak için ilk girdiyi iki nokta üst üste karakterlerine göre ayırarak 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.Timekullanarak birtime.Datenesnesi 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]" - Biçim isteklerini elde etmek için ikinci girdiyi virgüllere göre ayırarak ayrıştırın
- Biçimlendirme başlığını görüntüleyin:
"Formatted outputs:" - Her biçim isteği için
Formatyöntemiyle uygun düzen dizesini kullanın:"iso"için:"2006-01-02"düzenini kullanın ve"ISO format: [formatted_result]"görüntüleyin"american"için:"01/02/2006"düzenini kullanın ve"American format: [formatted_result]"görüntüleyin"european"için:"02/01/2006"düzenini kullanın ve"European format: [formatted_result]"görüntüleyin"long"için:"January 2, 2006"düzenini kullanın ve"Long format: [formatted_result]"görüntüleyin"time12"için:"3:04 PM"düzenini kullanın ve"12-hour time: [formatted_result]"görüntüleyin"time24"için:"15:04"düzenini kullanın ve"24-hour time: [formatted_result]"görüntüleyin"full"için:"Monday, January 2, 2006 at 3:04 PM"düzenini kullanın ve"Full format: [formatted_result]"görüntüleyin"compact"için:"20060102"düzenini kullanın ve"Compact format: [formatted_result]"görüntüleyin
- İstatistikleri hesaplayıp 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 ayırmak 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 zaman biçimlendirmesinde Mon Jan 2 15:04:05 MST 2006 referans tarihinin şablon olarak kullanıldığını ve bu bileşenleri istediğiniz düzende sıraladığınızı unutmayın. Bu görev, aynı zaman nesnesine birden çok farklı biçim kalıbı uygulamanızı sağlayarak Go'nun benzersiz düzen tabanlı biçimlendirme sisteminin nasıl çalıştığını gösterir.
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ışlarKendi başına pratik yap: Online Go derleyicisi