Menu
CoddyTech

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 nesneniz olduğunda, bunu genellikle okunabilir bir dize biçimine dönüştürmeniz gerekir. Go, zaman biçimlendirme konusunda diğer programlama dillerinden farklı, kendine özgü bir yaklaşım kullanır.

Go, %Y-%m-%d gibi biçim kodları kullanmak yerine bir şablon olarak referans tarihini kullanır. Bu referans tarihi, tam olarak şu anı temsil eden Mon Jan 2 15:04:05 MST 2006 değeridir: Mountain Standard Time'a göre 2 Ocak 2006, saat 15:04:05.

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Çıktı: 2023-10-26

Temel fikir, referans tarih bileşenlerini istediğin düzende yerleştirmendir. YYYY-MM-DD biçimi için "2006-01-02" kullanırsın; çünkü referans tarih bu düzende böyle görünür. Jan 2, 2006 gibi farklı bir biçim için "Jan 2, 2006" kullanırsın.

Düzene dayalı bu yaklaşım, Go'nun zaman biçimlendirmesini hem akılda kalıcı hem de esnek hâle getirir. Referans tarihi bir kez hatırladığında, bileşenlerini istediğin düzende sıralayarak istediğin biçimi oluşturabilirsin.

challenge icon

Görev

Kolay

Go'nun kendine özgü referans tarih düzeni sistemini kullanarak time.Time nesnelerini biçimlendiren, birden çok biçimde tarih ve saat görüntüleme sistemi oluşturun. Bu meydan okuma, ç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 bilgisi içeren bir dizge (ör. "2023:12:25:14:30")
  • "format1,format2,format3" biçiminde, virgülle ayrılmış biçim istekleri içeren bir dizge (ör. "iso,american,european,time12,time24")

Göreviniz:

  1. Yıl, ay, gün, saat ve dakika değerlerini çıkarmak için ilk girdiyi iki nokta üst üste karakterlerine göre bölerek ayrıştırmak
  2. Bu dizge değerlerini strconv paketini kullanarak tam sayılara dönüştürmek
  3. Ayrıştırılan değerlerle time.Date kullanarak bir time.Time nesnesi oluşturmak (konum için time.UTC, saniye ve nanosaniyeler için 0 kullanın)
  4. Uygulama başlığını görüntülemek: "=== DATE/TIME FORMATTER ==="
  5. Kaynak zamanı görüntülemek: "Source time: [complete_time_object]"
  6. Biçim isteklerini almak için ikinci girdiyi virgüllere göre bölerek ayrıştırmak
  7. Biçimlendirme başlığını görüntülemek: "Formatted outputs:"
  8. Her biçim isteği için Format yöntemiyle uygun düzen dizgesini kullanmak:
    • "iso" için: "2006-01-02" düzenini kullanın ve "ISO format: [formatted_result]" değerini görüntüleyin
    • "american" için: "01/02/2006" düzenini kullanın ve "American format: [formatted_result]" değerini görüntüleyin
    • "european" için: "02/01/2006" düzenini kullanın ve "European format: [formatted_result]" değerini görüntüleyin
    • "long" için: "January 2, 2006" düzenini kullanın ve "Long format: [formatted_result]" değerini görüntüleyin
    • "time12" için: "3:04 PM" düzenini kullanın ve "12-hour time: [formatted_result]" değerini görüntüleyin
    • "time24" için: "15:04" düzenini kullanın ve "24-hour time: [formatted_result]" değerini görüntüleyin
    • "full" için: "Monday, January 2, 2006 at 3:04 PM" düzenini kullanın ve "Full format: [formatted_result]" değerini görüntüleyin
    • "compact" için: "20060102" düzenini kullanın ve "Compact format: [formatted_result]" değerini görüntüleyin
  9. İstatistikleri hesaplayıp görüntülemek:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Referans bilgilerini görüntülemek:
    • "=== 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"
  11. Tamamlanma mesajını görüntülemek: "Date formatting completed using Go's layout system"

Zaman işlemleri için time paketini, girdi dizgelerini bölmek için strings paketini, dizgeleri tam sayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullanın. Go'da zaman biçimlendirmesinin Mon Jan 2 15:04:05 MST 2006 referans tarihini şablon olarak kullandığını ve bu bileşenleri istediğiniz kalıba göre düzenlediğinizi unutmayın. Bu meydan okuma, aynı zaman nesnesine birden çok farklı biçim kalıbı uygulamanızı sağlayarak Go'nun kendine özgü 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şaretlerinden bölerek ayrıştır
	dateComponents := strings.Split(dateInput, ":")
	
	// Metin 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)
	
	// Biçim isteklerini ayrıştır
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Kodunu aşağıya yaz
	// Uygulama başlığını göster
	// Kaynak zamanı göster
	// Her biçim isteğini işle ve biçimlendirilmiş çıktıları göster
	// İstatistikleri hesapla ve göster
	// Referans bilgilerini göster
	// Tamamlanma mesajını göster
	
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Go derleyicisi