Memformat Waktu
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 60 dari 68.
Setelah kamu memiliki object time.Time, kamu sering perlu mengonversinya ke format string yang mudah dibaca. Go menggunakan pendekatan unik untuk pemformatan waktu yang berbeda dari bahasa pemrograman lain.
Alih-alih menggunakan kode format seperti %Y-%m-%d, Go menggunakan tanggal referensi sebagai templat. Tanggal referensi ini adalah Mon Jan 2 15:04:05 MST 2006, yang mewakili waktu yang tepat: 2 Januari 2006, pukul 15:04:05 Waktu Standar Pegunungan.
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // output: 2023-10-26Inti utamanya adalah kamu menyusun komponen tanggal referensi sesuai pola yang kamu inginkan. Untuk format YYYY-MM-DD, kamu menggunakan "2006-01-02" karena seperti itulah tampilan tanggal referensi dalam pola tersebut. Untuk format lain seperti Jan 2, 2006, kamu menggunakan "Jan 2, 2006".
Pendekatan berbasis tata letak ini membuat pemformatan waktu di Go mudah diingat dan fleksibel. Setelah kamu mengingat tanggal acuan, kamu bisa membuat format apa pun dengan cukup menyusun komponennya sesuai pola yang kamu inginkan.
Tantangan
MudahBuat sistem tampilan tanggal dan waktu multi-format yang memformat object time.Time menggunakan sistem layout tanggal referensi unik Go. Tantangan ini akan menguji kemampuanmu menggunakan method Format dengan pola layout yang berbeda untuk membuat berbagai representasi tanggal dan waktu.
Kamu akan menerima dua input:
- String yang berisi informasi tanggal dalam format
"year:month:day:hour:minute"(misalnya,"2023:12:25:14:30") - String yang berisi permintaan format yang dipisahkan dengan koma dalam format
"format1,format2,format3"(misalnya,"iso,american,european,time12,time24")
Tugasmu adalah:
- Uraikan input pertama dengan memisahkan berdasarkan titik dua untuk mengambil nilai tahun, bulan, hari, jam, dan menit
- Konversikan nilai string ini menjadi bilangan bulat menggunakan package
strconv - Buat object
time.Timemenggunakantime.Datedengan nilai yang sudah diuraikan (gunakantime.UTCuntuk lokasi, 0 untuk detik dan nanodetik) - Tampilkan header aplikasi:
"=== DATE/TIME FORMATTER ===" - Tampilkan waktu sumber:
"Source time: [complete_time_object]" - Uraikan input kedua dengan memisahkan berdasarkan koma untuk mendapatkan permintaan format
- Tampilkan header pemformatan:
"Formatted outputs:" - Untuk setiap permintaan format, gunakan string layout yang sesuai dengan method
Format:- Untuk
"iso": Gunakan layout"2006-01-02"dan tampilkan"ISO format: [formatted_result]" - Untuk
"american": Gunakan layout"01/02/2006"dan tampilkan"American format: [formatted_result]" - Untuk
"european": Gunakan layout"02/01/2006"dan tampilkan"European format: [formatted_result]" - Untuk
"long": Gunakan layout"January 2, 2006"dan tampilkan"Long format: [formatted_result]" - Untuk
"time12": Gunakan layout"3:04 PM"dan tampilkan"12-hour time: [formatted_result]" - Untuk
"time24": Gunakan layout"15:04"dan tampilkan"24-hour time: [formatted_result]" - Untuk
"full": Gunakan layout"Monday, January 2, 2006 at 3:04 PM"dan tampilkan"Full format: [formatted_result]" - Untuk
"compact": Gunakan layout"20060102"dan tampilkan"Compact format: [formatted_result]"
- Untuk
- Hitung dan tampilkan statistik:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- Tampilkan informasi referensi:
"=== 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"
- Tampilkan pesan penyelesaian:
"Date formatting completed using Go's layout system"
Gunakan package time untuk operasi waktu, package strings untuk memisahkan string input, package strconv untuk mengonversi string menjadi bilangan bulat, dan package fmt untuk output berformat. Ingat bahwa pemformatan waktu Go menggunakan tanggal referensi Mon Jan 2 15:04:05 MST 2006 sebagai templat, lalu kamu menyusun komponen-komponen ini dalam pola yang diinginkan. Tantangan ini menunjukkan cara kerja sistem pemformatan berbasis layout unik Go dengan memintamu menerapkan beberapa pola format berbeda pada object waktu yang sama.
Coba sendiri
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Baca input
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// Uraikan komponen tanggal dengan memisahkannya berdasarkan titik dua
dateComponents := strings.Split(dateInput, ":")
// Ubah komponen string menjadi bilangan bulat
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])
// Buat object time.Time
sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
// Uraikan permintaan format
formatRequests := strings.Split(formatInput, ",")
// TODO: Tulis kodemu di bawah ini
// Tampilkan judul aplikasi
// Tampilkan waktu sumber
// Proses setiap permintaan format dan tampilkan output yang telah diformat
// Hitung dan tampilkan statistik
// Tampilkan informasi referensi
// Tampilkan pesan penyelesaian
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas7Penanganan Error secara Mendalam
Tipe Error KustomMembungkus Error dengan `%w`Membuka Bungkus Error dengan `errors.Is`Membuka Bungkus Error dengan `errors.As`Memahami `panic`Menggunakan `recover`Rangkuman: Pembagian Aman10Bekerja dengan Waktu
Mendapatkan Waktu Saat IniMembuat Waktu TertentuMemformat WaktuMengurai String WaktuDurasi WaktuAritmetika WaktuTidur dan TickerRekap: Timer Sederhana2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online