Menu
Coddy logo textTech

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-26

Temel 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.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Go'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:

  1. 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
  2. Bu dize değerlerini strconv paketini kullanarak tam sayılara dönüştürün
  3. Ayrıştırılan değerlerle time.Date kullanarak bir time.Time nesnesi oluşturun (konum için time.UTC, saniye ve nanosaniye için 0 kullanın)
  4. Uygulama başlığını görüntüleyin: "=== DATE/TIME FORMATTER ==="
  5. Kaynak zamanı görüntüleyin: "Source time: [complete_time_object]"
  6. Format isteklerini almak için ikinci girdiyi virgüllerden bölerek ayrıştırın
  7. Biçimlendirme başlığını görüntüleyin: "Formatted outputs:"
  8. Her format isteği için, Format metodu 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
  9. İ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]"
  10. 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"
  11. 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-26

Yaygı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
	
}
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