Menu
CoddyTech

Belirli Bir Zaman Oluşturma

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 59 / 68.

time.Now() sana şu anı verirken, çoğu zaman belirli tarihler ve saatlerle çalışman gerekir. Go, belirttiğin herhangi bir tarih ve saati temsil eden bir time.Time nesnesi oluşturmak için time.Date işlevini sunar.

time.Date işlevi, tam olarak şu sırayla sekiz parametre alır: yıl, ay, gün, saat, dakika, saniye, nanosaniye ve konum. Temel söz dizimi şöyledir:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Go'nun aylar için time.March gibi sabitler kullandığına dikkat edin; bu, kodunuzu sayı kullanmaya kıyasla daha okunabilir hâle getirir. Tercih ederseniz tam sayıları da (1-12) kullanabilirsiniz. Konum parametresi, UTC saati için genellikle time.UTC değerini, sisteminizin yerel saat dilimi içinse time.Local değerini kullanır.

Bu yaklaşım, ister doğum günü, ister son tarih, ister tarihî bir tarih olsun, belirli herhangi bir anı oluşturma konusunda size tam kontrol sağlar. Sonuçta ortaya çıkan time.Time nesnesi, time.Now() nesnesiyle tamamen aynı şekilde çalışır ve aynı zaman işlemlerinin tümünde kullanılabilir.

challenge icon

Görev

Kolay

Tarihteki belirli tarih ve saatleri temsil etmek için time.Date kullanan bir tarihî olay zaman çizelgesi uygulaması oluşturun. Bu meydan okuma, kesin tarihî anlar için time.Time nesneleri oluşturma ve bunları düzenli bir biçimde görüntüleme becerinizi sınayacaktır.

İki girdi alacaksınız:

  • "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" biçiminde tarihî olaylar içeren bir dize (ör. "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • "option1,option2,option3" biçiminde virgüllerle ayrılmış görüntüleme seçeneklerini içeren bir dize (ör. "chronological,details,summary")

Göreviniz:

  1. Tek tek olay girdilerini elde etmek için ilk girdiyi virgüllere göre bölmek
  2. Her olay girdisini; olay adını, yılı, ayı, günü, saati ve dakikayı çıkarmak için iki nokta üst üste işaretlerine göre bölmek
  3. Sayı dizelerini tam sayılara dönüştürmek ve her olay için time.UTC konum parametresini, saniye ve nanosaniye için de 0 değerini kullanarak time.Date ile bir time.Time nesnesi oluşturmak
  4. Uygulama başlığını görüntülemek: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Olayların yüklenme onayını görüntülemek: "Loading historical events..."
  6. Her olay için şunu görüntülemek: "Loaded: [event_name] - [complete_time_object]"
  7. Görüntüleme seçeneklerini elde etmek için ikinci girdiyi virgüllere göre bölmek
  8. Her görüntüleme seçeneğini işlemek:
    • "chronological" için: "=== CHRONOLOGICAL ORDER ===" ifadesini ve ardından tarihe göre sıralanmış (en eski önce) olayları, "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC" biçiminde görüntülemek
    • "details" için: "=== DETAILED INFORMATION ===" ifadesini ve ardından her olay için şu satırları görüntülemek (son dört satırın başında iki boşluk bulunur):
      Event: [event_name]
        Date: [year]-[month]-[day]
        Time: [hour]:[minute] UTC
        Weekday: [weekday_name]
        Unix timestamp: [unix_seconds]
    • "summary" için: "=== TIMELINE SUMMARY ===" ifadesini ve ardından şunları görüntülemek:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • "years" için: "=== EVENTS BY DECADE ===" ifadesini ve ardından on yıla göre gruplandırılmış olayları, "[decade]s: [comma_separated_event_names]" biçiminde görüntülemek
  9. Tamamlanma mesajını görüntülemek: "Historical timeline processing completed"

Biçimlendirme kuralları: Loaded: satırı time.Time değerini olduğu gibi %v ile yazdırır; örneğin Loaded: Moon Landing - 1969-07-20 20:17:00 +0000 UTC. Diğer tüm tarih ve saatler elle oluşturulur: ay, gün ve saatin başında sıfır bulunmaz, dakika ise her zaman iki basamaklıdır (%02d</code); dolayısıyla aynı olay <code>Moon Landing: 1969-7-20 at 20:17 UTC biçiminde yazdırılır ve 0. dakika 21:00 olarak yazdırılır. [unix_seconds], 1970 öncesindeki tarihler için negatif olan Unix() değeridir. On yıllar listesinde on yıllar en eskiden en yeniye sıralanır ve her on yıla ait adlar, giriş sırasına göre, aralarında boşluk olmadan virgülle birleştirilir.

time paketini belirli tarihleri time.Date ile oluşturmak, strings paketini girdi dizelerini bölmek, strconv paketini sayı dizelerini tam sayılara dönüştürmek ve biçimlendirilmiş çıktı için fmt paketini kullanın. time.Date parametrelerinin kesin sırasının yıl, ay, gün, saat, dakika, saniye, nanosaniye ve konum olduğunu unutmayın. Kronolojik sıralama için time.Time nesnelerini Before() yöntemiyle karşılaştırabilirsiniz. Bu meydan okuma, belirli zaman anlarının nasıl oluşturulacağını ve Go'nun zaman işlevlerini kullanarak tarihî verilerle nasıl çalışılacağını gösterir.

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Boşlukları doğru şekilde işlemek için girdiyi bufio.Scanner kullanarak oku
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Olayları girdiden ayrıştır
	eventEntries := strings.Split(eventsInput, ",")
	
	// Görüntüleme seçeneklerini girdiden ayrıştır
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Kodunu aşağıya yaz
	// 1. Ad, yıl, ay, gün, saat ve dakikayı elde etmek için her olay kaydını ayrıştır
	// 2. Erişmeden önce parts diliminin yeterli sayıda öğe içerip içermediğini kontrol etmeyi unutma
	// 3. Metin biçimindeki sayıları strconv.Atoi() kullanarak tam sayılara dönüştür
	// 4. Her olay için time.Date() kullanarak time.Time nesneleri oluştur
	// 5. Uygulama başlığını ve yükleme mesajlarını görüntüle
	// 6. Her görüntüleme seçeneğini işle (kronolojik, ayrıntılar, özet, yıllar)
	// 7. 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