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

অ্যান্ড্রয়েডে ইন্টারনেট থেকে বর্তমান তারিখ ও সময় পাওয়ার পদ্ধতি

এই টিউটোরিয়ালে আমরা শিখব কীভাবে ইন্টারনেট থেকে নেটওয়ার্ক টাইম প্রোটোকল (NTP) বা সার্ভার টাইম ব্যবহার করে সঠিক বর্তমান তারিখ ও সময় পেতে হয়।

গুরুত্বপূর্ণ নোট

প্রদত্ত উদাহরণে আসলে ডিভাইসের লোকাল ক্যালেন্ডার ব্যবহার করা হয়েছে, ইন্টারনেট থেকে নয়। নিচে আসল ইন্টারনেট টাইম পাওয়ার পদ্ধতিগুলো দেওয়া হলো।

প্রয়োজনীয় ধাপগুলো (লোকাল টাইম - মূল উদাহরণ)

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

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট ফাইল তৈরি করুন

res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন:

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="168dp" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="36dp"
        android:text="Click here to get current time and date"
        android:textColor="@color/colorPrimary" />
</RelativeLayout>

ধাপ ৩: মেইন এক্টিভিটিতে লোকাল টাইম দেখান

src/MainActivity.java ফাইলে নিচের কোড যোগ করুন:

package app.com.sample;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    Calendar calendar;
    SimpleDateFormat simpleDateFormat;
    String date;
    TextView displayDateTime;
    Button btn;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        displayDateTime = findViewById(R.id.textView);
        btn = findViewById(R.id.button);
        calendar = Calendar.getInstance();
        simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        date = simpleDateFormat.format(calendar.getTime());
        
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                displayDateTime.setText(date);
            }
        });
    }
}

ধাপ ৪: ম্যানিফেস্ট কনফিগার করুন

AndroidManifest.xml ফাইল:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <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>

আসল ইন্টারনেট টাইম পাওয়ার পদ্ধতি (NTP)

NTP ক্লায়েন্ট বাস্তবায়ন (Java)

public class NTPClient {
    private static final String NTP_SERVER = "pool.ntp.org";
    private static final int NTP_PORT = 123;
    private static final int NTP_PACKET_SIZE = 48;
    private static final long OFFSET_1900_TO_1970 = 2208988800L;
    
    public static long getNTPTime() throws IOException {
        DatagramSocket socket = new DatagramSocket();
        socket.setSoTimeout(5000);
        
        InetAddress address = InetAddress.getByName(NTP_SERVER);
        byte[] buffer = new byte[NTP_PACKET_SIZE];
        
        // NTP রিকোয়েস্ট প্যাকেট তৈরি
        buffer[0] = 0x1B; // LI=0, VN=3, Mode=3 (Client)
        
        DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);
        socket.send(request);
        
        DatagramPacket response = new DatagramPacket(buffer, buffer.length);
        socket.receive(response);
        socket.close();
        
        // ট্রান্সমিট টাইমস্ট্যাম্প পড়ুন (বাইট 40-47)
        long transmitTime = 0;
        for (int i = 40; i < 48; i++) {
            transmitTime = (transmitTime << 8) | (buffer[i] & 0xFF);
        }
        
        // NTP টাইমস্ট্যাম্প (1900-এ থেকে) -> Unix টাইমস্ট্যাম্প (1970-এ থেকে)
        return (transmitTime / 0x100000000L) - OFFSET_1900_TO_1970;
    }
}

// ব্যবহার (ব্যাকগ্রাউন্ড থ্রেডে):
new Thread(() -> {
    try {
        long ntpTimeMillis = NTPClient.getNTPTime() * 1000L;
        runOnUiThread(() -> {
            Date date = new Date(ntpTimeMillis);
            textView.setText(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(date));
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

HTTP হেডার থেকে টাইম পাওয়ার সহজ পদ্ধতি

// OkHttp ব্যবহার করে
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://www.google.com").build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String dateHeader = response.header("Date"); // RFC 1123 ফরম্যাট
        if (dateHeader != null) {
            SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
            Date serverDate = sdf.parse(dateHeader);
            runOnUiThread(() -> textView.setText(serverDate.toString()));
        }
    }
    
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }
});

অনুমতি প্রয়োজন

<uses-permission android:name="android.permission.INTERNET" />

সারাংশ

ডিভাইসের লোকাল টাইম পাওয়া সহজ (Calendar.getInstance()), কিন্তু সেটি ইউজার পরিবর্তন করতে পারে। সঠিক টাইমের জন্য NTP বা HTTP Date হেডার ব্যবহার করুন, তবে নেটওয়ার্ক কল ব্যাকগ্রাউন্ড থ্রেডে করুন।

  1. অ্যান্ড্রয়েড অ্যাপ্লিকেশনে বর্তমান তারিখ ও সময় প্রদর্শন করার পদ্ধতি

  2. এন্ড্রয়েডে তারিখ ও সময় পরিবর্তন লিসেনার লিখার পদ্ধতি

  3. অ্যান্ড্রয়েডে তারিখ এবং সময় ফরম্যাট করার পদ্ধতি

  4. অ্যান্ড্রয়েডে বর্তমান লোকেশনের ল্যাটিটিউড এবং লองিটিউড কীভাবে পাবেন?