কম্পিউটার টিউটোরিয়াল

কোটলিন ব্যবহার করে অ্যান্ড্রয়েডে ISO 8601 স্ট্রিংকে Date/Time অবজেক্টে কনভার্ট করা

ওভারভিউ

এই টিউটোরিয়ালটি দেখায় কিভাবে একটি ISO 8601 ফরম্যাটের ডেট-টাইম স্ট্রিং (যেমন: "2020-07-05T09:27:37Z") কে জাভার SimpleDateFormat ব্যবহার করে java.util.Date অবজেক্টে পার্স করা যায়।

পূর্বশর্ত

  • অ্যান্ড্রয়েড স্টুডিও (কোটলিন)
  • java.text.SimpleDateFormat, java.util.Date ক্লাস

ধাপ ১: প্রজেক্ট তৈরি করুন

File → New Project → Empty Activity → Language: Kotlin।

ধাপ ২: লেআউট (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAlignment="center"
        android:textColor="@android:color/holo_red_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

ধাপ ৩: MainActivity.kt

package com.example.iso8601parse

import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.TimeZone

class MainActivity : AppCompatActivity() {

    lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        textView = findViewById(R.id.textView)

        val isoString = "2020-07-05T09:27:37Z"
        
        // ISO 8601 প্যাটার্ন (UTC - Zulu time)
        val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).apply {
            timeZone = TimeZone.getTimeZone("UTC")
        }

        try {
            val date: Date = format.parse(isoString)
            textView.text = "ISO 8601 date/time: $date"
        } catch (e: Exception) {
            textView.text = "Parse Error: ${e.message}"
            e.printStackTrace()
        }
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.iso8601parse">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

চলান ও ফলাফল

আউটপুট: ISO 8601 date/time: Sun Jul 05 09:27:37 GMT+06:00 2020 (আপনার টাইমজোন অনুযায়ী)।

ISO 8601 ফরম্যাট ভেরিয়েশন ও প্যাটার্ন

ISO স্ট্রিং উদাহরণSimpleDateFormat প্যাটার্ন
2020-07-05T09:27:37Zyyyy-MM-dd'T'HH:mm:ss'Z'
2020-07-05T09:27:37.123Zyyyy-MM-dd'T'HH:mm:ss.SSS'Z'
2020-07-05T09:27:37+06:00yyyy-MM-dd'T'HH:mm:ssXXX
2020-07-05T09:27:37.123+06:00yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2020-07-05yyyy-MM-dd

আধুনিক পদ্ধতি (Java 8+ / API 26+): java.time API

import java.time.Instant
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter

val isoString = "2020-07-05T09:27:37Z"

// Instant (UTC)
val instant = Instant.parse(isoString)

// ZonedDateTime (লোকাল টাইমজোনে)
val zdt = ZonedDateTime.parse(isoString)

// ফরম্যাট করা
val formatter = DateTimeFormatter.ofPattern("dd MMM yyyy, hh:mm a", Locale.getDefault())
val formatted = zdt.format(formatter)
// আউটপুট: "05 Jul 2020, 03:27 PM" (যদি টাইমজোন GMT+6 হয়)

লाभ: থ্রেড-সেফ, ইমিউটেবল, আরও ক্ষমতাশালী, টাইমজোন হ্যান্ডলিং সহজ।

Android-এ java.time ব্যবহার (API 26+)

  • API 26+ (Android 8.0+) - নেটিভ সাপোর্ট।
  • API 26 নিচে - coreLibraryDesugaringEnabled true (build.gradle) এবং implementation "com.android.tools:desugar_jdk_libs:1.2.2" দিয়ে ব্যাকপোর্ট করুন।

সাধারণ বাগ এড়ানোর টিপস

  • Locale: সবসময় Locale.US বা Locale.ROOT ব্যবহার করুন (ডিভাইস লোকেল বদলে ফরম্যাট ভেঙে যায়)।
  • TimeZone: UTC স্ট্রিং ('Z' সাফিক্স) পার্স করার সময় timeZone = TimeZone.getTimeZone("UTC") সেট করুন।
  • Thread Safety: SimpleDateFormat থ্রেড-সেফ নয়। প্রতিবার নতুন ইনস্ট্যান্স তৈরি করুন বা ThreadLocal ব্যবহার করুন।
  1. অ্যান্ড্রয়েডে তারিখ এবং সময় ফরম্যাট করার পদ্ধতি

  2. How to convert ISO 8601 string to Date/time object in Android?

  3. Android-এ কালার ইন্টিজারকে Hex String-এ কনভার্ট করা

  4. অ্যান্ড্রয়েডে মিলিসেকেন্ডকে ডেট ফরম্যাটে কনভার্ট করবেন কীভাবে?