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.
Görev
KolayTarihteki 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:
- Tek tek olay girdilerini elde etmek için ilk girdiyi virgüllere göre bölmek
- 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
- Sayı dizelerini tam sayılara dönüştürmek ve her olay için
time.UTCkonum parametresini, saniye ve nanosaniye için de 0 değerini kullanaraktime.Dateile birtime.Timenesnesi oluşturmak - Uygulama başlığını görüntülemek:
"=== HISTORICAL TIMELINE APPLICATION ===" - Olayların yüklenme onayını görüntülemek:
"Loading historical events..." - Her olay için şunu görüntülemek:
"Loaded: [event_name] - [complete_time_object]" - Görüntüleme seçeneklerini elde etmek için ikinci girdiyi virgüllere göre bölmek
- 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- 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
}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 Ekleme7Derinlemesine Hata Yönetimi
Özel Hata Türleri`%w` ile Hataları Sarmalama`errors.Is` ile Sarmalı Açma`errors.As` ile Sarmalı Açma`panic` Kavramını Anlamak`recover` KullanımıÖzet - Güvenli Bölme10Zamanla Çalışmak
Şu Anki Zamanı AlmaBelirli Bir Zaman OluşturmaZamanı FormatlamaZaman Dizelerini AyrıştırmaZaman SüresiZaman AritmetiğiUyutma ve Ticker'larÖzet - Basit Zamanlayıcı2Structlar 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