Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Android System Time Retrieval Techniques

Tech May 16 3

Android provides multiple approaches for retrieving system time, including Calendar, Date, and currentTimeMillis methods.

Calendar Approach

The Calendar method requires obtaining an instance through Calendar.getInstance(), setting the timezone (China uses GMT+8:00), and then using Calendar.get() to extract specific time components like year, month, day, hour, minute, second, and weekday.

package com.example.timesample;

import java.util.Calendar;
import java.util.TimeZone;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class TimeDisplayActivity extends Activity {
	
	private TextView dateDisplay;
	private TextView timeDisplay;
	private Calendar calendarInstance;
	private String currentYear;
	private String currentMonth;
	private String currentDate;
	private String currentHour;
	private String currentMinute;
	private String currentSecond;
	private String formattedDate;
	private String formattedTime;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_layout);
		dateDisplay = (TextView) findViewById(R.id.dateView);
		timeDisplay = (TextView) findViewById(R.id.timeView);
		
		calendarInstance = Calendar.getInstance(); 
		calendarInstance.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); 
		
		currentYear = String.valueOf(calendarInstance.get(Calendar.YEAR)); 
		currentMonth = String.valueOf(calendarInstance.get(Calendar.MONTH) + 1);
		currentDate = String.valueOf(calendarInstance.get(Calendar.DAY_OF_MONTH));
		
		int periodIndicator = calendarInstance.get(Calendar.AM_PM);
		if (periodIndicator == 0)
			currentHour = String.valueOf(calendarInstance.get(Calendar.HOUR));
		else
			currentHour = String.valueOf(calendarInstance.get(Calendar.HOUR) + 12);
			
		currentMinute = String.valueOf(calendarInstance.get(Calendar.MINUTE));
		currentSecond = String.valueOf(calendarInstance.get(Calendar.SECOND));
		
		formattedDate = currentYear + "-" + currentMonth + "-" + currentDate;
		formattedTime = currentHour + ":" + currentMinute + ":" + currentSecond;
		
		dateDisplay.setText(formattedDate);
		timeDisplay.setText(formattedTime);
	}

	@Override
	public boolean onOptionsItemSelected(android.view.MenuItem item) {
		return super.onOptionsItemSelected(item);
	}
}

The drawback is that these time elements are separate values, requiring manual concatenation into a single string for display purposes. However, this approach works well when individual time components like weekdays are needed. The Calendar.AM_PM property can determine whether it's AM or PM (0 for AM, 1 for PM), allowing for 12-hour or 24-hour format display. Alternatively, Calendar.HOUR_OF_DAY provides 24-hour format directly.

Date Method

The Date approach is straightforward, requiring just one statement: new Date().toString(), which provides complete time information in standard format without additional assembly. The limitation is that custom formatting or individual time components require more complex handling.

package com.example.timesample_02;

import java.util.Date;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class SimpleTimeActivity extends Activity {
	
	private TextView timeOutput;
	private Date currentTime;
	private String timeString;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_layout);
		timeOutput = (TextView) findViewById(R.id.displayText);
		currentTime = new Date();
		timeString = currentTime.toString();
		timeOutput.setText(timeString);
	}

	@Override
	public boolean onOptionsItemSelected(android.view.MenuItem item) {
		return super.onOptionsItemSelected(item);
	}
}

You can define SimpleDateFormat to control which information appears, such as displaying year, month, day, hour, minute, and weekday:

import java.text.SimpleDateFormat;

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm EEEE");
timeString = formatter.format(currentTime);
timeOutput.setText(timeString);

currentTimeMillis Method

System.currentTimeMillis() generates a millisecond value representing the current time elapsed since 1970-01-01 00:00:00. This raw millisecond count has limited usefulness alone, but Date(System.currentTimeMillis()) converts it into a usable date object. Actually, new Date() is equivalent to new Date(System.currentTimeMillis()). You can also pass any long variable to Date, such as new Date(1000000000L), which results in the date: 1970-01-12 21:46:40.

Related Articles

Understanding Strong and Weak References in Java

Strong References Strong reference are the most prevalent type of object referencing in Java. When an object has a strong reference pointing to it, the garbage collector will not reclaim its memory. F...

Comprehensive Guide to SSTI Explained with Payload Bypass Techniques

Introduction Server-Side Template Injection (SSTI) is a vulnerability in web applications where user input is improper handled within the template engine and executed on the server. This exploit can r...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.