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.

challenge icon

Görev

Kolay

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

  1. 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
  2. Bu dize değerlerini strconv paketini kullanarak tam sayılara dönüştürün
  3. Ayrıştırılan değerlerle time.Time kullanarak bir time.Date 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. Biçim isteklerini elde etmek için ikinci girdiyi virgüllere göre ayırarak ayrıştırın
  7. Biçimlendirme başlığını görüntüleyin: "Formatted outputs:"
  8. Her biçim isteği için Format yö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
  9. İ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]"
  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 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
	
}
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