Menu
CoddyTech

Memformat Waktu

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 60 dari 68.

Setelah kamu memiliki objek time.Time, kamu sering perlu mengubahnya menjadi format string yang mudah dibaca. Go menggunakan pendekatan unik untuk pemformatan waktu yang berbeda dari bahasa pemrograman lainnya.

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

Inti pentingnya adalah kamu menyusun komponen tanggal acuan dalam pola yang kamu inginkan. Untuk format YYYY-MM-DD, kamu menggunakan "2006-01-02" karena begitulah tampilan tanggal acuan 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 mengingat tanggal acuan, kamu bisa membuat format apa pun dengan menyusun komponennya sesuai pola yang kamu inginkan.

challenge icon

Tantangan

Mudah

Buat sistem tampilan tanggal dan waktu multi-format yang memformat objek time.Time menggunakan sistem tata letak tanggal referensi unik Go. Tantangan ini akan menguji kemampuanmu menggunakan metode Format dengan pola tata letak yang berbeda untuk membuat beragam representasi tanggal dan waktu.

Kamu akan menerima dua input:

  • String yang berisi informasi tanggal dengan format "year:month:day:hour:minute" (misalnya, "2023:12:25:14:30")
  • String yang berisi permintaan format yang dipisahkan dengan koma, dengan format "format1,format2,format3" (misalnya, "iso,american,european,time12,time24")

Tugasmu adalah:

  1. Parse input pertama dengan memisahkannya berdasarkan titik dua untuk mengambil nilai tahun, bulan, hari, jam, dan menit
  2. Konversi nilai string ini menjadi bilangan bulat menggunakan package strconv
  3. Buat objek time.Time menggunakan time.Date dengan nilai yang sudah di-parse (gunakan time.UTC untuk lokasi, serta 0 untuk detik dan nanodetik)
  4. Tampilkan header aplikasi: "=== DATE/TIME FORMATTER ==="
  5. Tampilkan waktu sumber: "Source time: [complete_time_object]"
  6. Parse input kedua dengan memisahkannya berdasarkan koma untuk mendapatkan permintaan format
  7. Tampilkan header pemformatan: "Formatted outputs:"
  8. Untuk setiap permintaan format, gunakan string tata letak yang sesuai dengan metode Format:
    • Untuk "iso": Gunakan tata letak "2006-01-02" dan tampilkan "ISO format: [formatted_result]"
    • Untuk "american": Gunakan tata letak "01/02/2006" dan tampilkan "American format: [formatted_result]"
    • Untuk "european": Gunakan tata letak "02/01/2006" dan tampilkan "European format: [formatted_result]"
    • Untuk "long": Gunakan tata letak "January 2, 2006" dan tampilkan "Long format: [formatted_result]"
    • Untuk "time12": Gunakan tata letak "3:04 PM" dan tampilkan "12-hour time: [formatted_result]"
    • Untuk "time24": Gunakan tata letak "15:04" dan tampilkan "24-hour time: [formatted_result]"
    • Untuk "full": Gunakan tata letak "Monday, January 2, 2006 at 3:04 PM" dan tampilkan "Full format: [formatted_result]"
    • Untuk "compact": Gunakan tata letak "20060102" dan tampilkan "Compact format: [formatted_result]"
  9. Hitung dan tampilkan statistik:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. 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"
  11. 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, 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 tata letak yang unik di Go dengan meminta kamu menerapkan beberapa pola format berbeda pada objek 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 sudah diformat
	// Hitung dan tampilkan statistik
	// Tampilkan informasi referensi
	// Tampilkan pesan penyelesaian
	
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online