ওভারভিউ
এই টিউটোরিয়ালটি দেখায় কিভাবে একটি 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:37Z | yyyy-MM-dd'T'HH:mm:ss'Z' |
2020-07-05T09:27:37.123Z | yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
2020-07-05T09:27:37+06:00 | yyyy-MM-dd'T'HH:mm:ssXXX |
2020-07-05T09:27:37.123+06:00 | yyyy-MM-dd'T'HH:mm:ss.SSSXXX |
2020-07-05 | yyyy-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ব্যবহার করুন।