🎯 Exemples recommandés
Balanced sample collections from various categories for you to explore
Exemples de Date et Heure Android Java
Exemples de date et heure Android Java incluant obtenir l'heure actuelle, formater les dates et analyser les chaînes de date
💻 Obtenir l'Heure Actuelle java
🟢 simple
⭐⭐
Obtenir l'heure système actuelle dans divers formats et fuseaux horaires
⏱️ 15 min
🏷️ java, android, datetime
Prerequisites:
Basic Java knowledge, Java Time API
// Android Java Get Current Time Examples
// Using java.time API (Android API 26+) and legacy Date API
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.Clock;
import java.util.Date;
import java.util.Calendar;
import android.os.SystemClock;
// 1. Current Time Using Modern API (API 26+)
public class ModernTimeGetter {
// Get current instant
public Instant getCurrentInstant() {
return Instant.now();
}
// Get current local date-time
public LocalDateTime getCurrentLocalDateTime() {
return LocalDateTime.now();
}
// Get current zoned date-time
public ZonedDateTime getCurrentZonedDateTime() {
return ZonedDateTime.now();
}
// Get current zoned date-time with specific zone
public ZonedDateTime getCurrentZonedDateTime(ZoneId zoneId) {
return ZonedDateTime.now(zoneId);
}
// Get current time in specific timezone
public ZonedDateTime getCurrentTimeInZone(String zone) {
ZoneId zoneId = ZoneId.of(zone);
return ZonedDateTime.now(zoneId);
}
// Get current timestamp (milliseconds since epoch)
public long getCurrentTimestamp() {
return Instant.now().toEpochMilli();
}
// Get current unix timestamp (seconds since epoch)
public long getCurrentUnixTimestamp() {
return Instant.now().getEpochSecond();
}
}
// 2. Current Time Using Legacy API
public class LegacyTimeGetter {
// Get current date
public Date getCurrentDate() {
return new Date();
}
// Get current calendar
public Calendar getCurrentCalendar() {
return Calendar.getInstance();
}
// Get current timestamp
public long getCurrentTimestamp() {
return System.currentTimeMillis();
}
// Get current time in specific timezone
public Calendar getCurrentTimeInTimezone(String timezone) {
return Calendar.getInstance(java.util.TimeZone.getTimeZone(timezone));
}
}
// 3. System Time Measurements (Android)
public class SystemTimeGetter {
// Get elapsed realtime (since boot)
public long getElapsedRealtime() {
return SystemClock.elapsedRealtime();
}
// Get elapsed realtime including deep sleep
public long getElapsedRealtimeNanos() {
return SystemClock.elapsedRealtimeNanos();
}
// Get uptime (since boot, excluding deep sleep)
public long getUptimeMillis() {
return SystemClock.uptimeMillis();
}
// Get current thread time
public long getCurrentThreadTimeMillis() {
return SystemClock.currentThreadTimeMillis();
}
// Get current thread CPU time
public long getCurrentThreadCpuTimeNano() {
return SystemClock.currentThreadCpuTimeNano();
}
}
// 4. Time Components Extraction
public class TimeComponentExtractor {
public static class TimeComponents {
public int year;
public int month;
public int day;
public int hour;
public int minute;
public int second;
public int nano;
public int dayOfWeek;
public int dayOfYear;
public TimeComponents(int year, int month, int day, int hour, int minute,
int second, int nano, int dayOfWeek, int dayOfYear) {
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minute = minute;
this.second = second;
this.nano = nano;
this.dayOfWeek = dayOfWeek;
this.dayOfYear = dayOfYear;
}
public void print() {
System.out.println("Date: " + year + "-" + month + "-" + day);
System.out.println("Time: " + hour + ":" + minute + ":" + second);
System.out.println("Day of week: " + dayOfWeek);
System.out.println("Day of year: " + dayOfYear);
System.out.println("Nanos: " + nano);
}
}
// Extract components using modern API
public TimeComponents extractComponentsModern(LocalDateTime localDateTime) {
return new TimeComponents(
localDateTime.getYear(),
localDateTime.getMonthValue(),
localDateTime.getDayOfMonth(),
localDateTime.getHour(),
localDateTime.getMinute(),
localDateTime.getSecond(),
localDateTime.getNano(),
localDateTime.getDayOfWeek().getValue(),
localDateTime.getDayOfYear()
);
}
// Extract components using legacy API
public TimeComponents extractComponentsLegacy(Calendar calendar) {
return new TimeComponents(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND),
calendar.get(Calendar.MILLISECOND) * 1_000_000,
calendar.get(Calendar.DAY_OF_WEEK),
calendar.get(Calendar.DAY_OF_YEAR)
);
}
// Get time of day
public String getTimeOfDay(LocalDateTime localDateTime) {
int hour = localDateTime.getHour();
if (hour >= 0 && hour <= 5) {
return "Early Morning";
} else if (hour >= 6 && hour <= 11) {
return "Morning";
} else if (hour >= 12 && hour <= 17) {
return "Afternoon";
} else if (hour >= 18 && hour <= 21) {
return "Evening";
} else {
return "Night";
}
}
}
// 5. Time Zone Operations
public class TimeZoneOperations {
// Get current time in multiple timezones
public java.util.Map<String, ZonedDateTime> getCurrentTimeInZones(java.util.List<String> zones) {
java.util.Map<String, ZonedDateTime> result = new java.util.HashMap<>();
for (String zone : zones) {
ZoneId zoneId = ZoneId.of(zone);
result.put(zone, ZonedDateTime.now(zoneId));
}
return result;
}
// Get available zone IDs
public java.util.Set<String> getAvailableZoneIds() {
return ZoneId.getAvailableZoneIds();
}
// Get system default timezone
public ZoneId getSystemTimezone() {
return ZoneId.systemDefault();
}
// Get offset from UTC
public String getUTCOffset() {
return getUTCOffset(ZoneId.systemDefault());
}
public String getUTCOffset(ZoneId zoneId) {
ZonedDateTime now = ZonedDateTime.now(zoneId);
return now.getOffset().getId();
}
}
// 6. Time Comparisons
public class TimeComparer {
public enum ComparisonResult {
BEFORE, EQUAL, AFTER
}
// Compare two instants
public ComparisonResult compareInstants(Instant instant1, Instant instant2) {
if (instant1.isBefore(instant2)) {
return ComparisonResult.BEFORE;
} else if (instant1.isAfter(instant2)) {
return ComparisonResult.AFTER;
} else {
return ComparisonResult.EQUAL;
}
}
public static class DurationInfo {
public long days;
public long hours;
public long minutes;
public long seconds;
public long millis;
public DurationInfo(long days, long hours, long minutes, long seconds, long millis) {
this.days = days;
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
this.millis = millis;
}
public void print() {
System.out.println("Duration: " + days + "d " + hours + "h " + minutes + "m " + seconds + "s");
}
}
// Calculate duration between instants
public DurationInfo calculateDuration(Instant instant1, Instant instant2) {
java.time.Duration duration = java.time.Duration.between(instant1, instant2);
return new DurationInfo(
duration.toDays(),
duration.toHours(),
duration.toMinutes(),
duration.getSeconds(),
duration.toMillis()
);
}
// Check if time is within range
public boolean isWithinRange(Instant instant, Instant start, Instant end) {
return !instant.isBefore(start) && !instant.isAfter(end);
}
}
// Main demonstration
public class GetCurrentTimeDemo {
public static void demonstrateGetCurrentTime() {
System.out.println("=== Android Java Get Current Time Examples ===\n");
// 1. Modern API
System.out.println("--- 1. Modern API (API 26+) ---");
ModernTimeGetter modernGetter = new ModernTimeGetter();
Instant instant = modernGetter.getCurrentInstant();
System.out.println("Current instant: " + instant);
LocalDateTime localDateTime = modernGetter.getCurrentLocalDateTime();
System.out.println("Local date-time: " + localDateTime);
ZonedDateTime zonedDateTime = modernGetter.getCurrentZonedDateTime();
System.out.println("Zoned date-time: " + zonedDateTime);
long timestamp = modernGetter.getCurrentTimestamp();
System.out.println("Timestamp (ms): " + timestamp);
long unixTimestamp = modernGetter.getCurrentUnixTimestamp();
System.out.println("Unix timestamp: " + unixTimestamp);
// 2. Time in different zones
System.out.println("\n--- 2. Time in Different Timezones ---");
ZonedDateTime timeInUTC = modernGetter.getCurrentTimeInZone("UTC");
System.out.println("UTC: " + timeInUTC);
ZonedDateTime timeInNY = modernGetter.getCurrentTimeInZone("America/New_York");
System.out.println("New York: " + timeInNY);
ZonedDateTime timeInTokyo = modernGetter.getCurrentTimeInZone("Asia/Tokyo");
System.out.println("Tokyo: " + timeInTokyo);
ZonedDateTime timeInLondon = modernGetter.getCurrentTimeInZone("Europe/London");
System.out.println("London: " + timeInLondon);
// 3. Legacy API
System.out.println("\n--- 3. Legacy API ---");
LegacyTimeGetter legacyGetter = new LegacyTimeGetter();
Date date = legacyGetter.getCurrentDate();
System.out.println("Current date: " + date);
Calendar calendar = legacyGetter.getCurrentCalendar();
System.out.println("Calendar time: " + calendar.getTime());
// 4. System time measurements
System.out.println("\n--- 4. System Time Measurements ---");
SystemTimeGetter systemGetter = new SystemTimeGetter();
System.out.println("Elapsed realtime: " + systemGetter.getElapsedRealtime() + " ms");
System.out.println("Uptime millis: " + systemGetter.getUptimeMillis() + " ms");
System.out.println("Current thread time: " + systemGetter.getCurrentThreadTimeMillis() + " ms");
// 5. Extract components
System.out.println("\n--- 5. Extract Time Components ---");
TimeComponentExtractor extractor = new TimeComponentExtractor();
TimeComponentExtractor.TimeComponents components = extractor.extractComponentsModern(localDateTime);
components.print();
System.out.println("\nTime of day: " + extractor.getTimeOfDay(localDateTime));
// 6. Multiple timezones
System.out.println("\n--- 6. Multiple Timezones ---");
TimeZoneOperations zoneOps = new TimeZoneOperations();
java.util.List<String> zones = new java.util.ArrayList<>();
zones.add("UTC");
zones.add("America/Los_Angeles");
zones.add("Europe/Paris");
zones.add("Asia/Shanghai");
java.util.Map<String, ZonedDateTime> timesInZones = zoneOps.getCurrentTimeInZones(zones);
for (java.util.Map.Entry<String, ZonedDateTime> entry : timesInZones.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
System.out.println("System timezone: " + zoneOps.getSystemTimezone());
System.out.println("UTC offset: " + zoneOps.getUTCOffset());
// 7. Time comparison
System.out.println("\n--- 7. Time Comparison ---");
TimeComparer comparer = new TimeComparer();
Instant now = Instant.now();
Instant later = now.plusSeconds(3600);
Instant earlier = now.minusSeconds(3600);
System.out.println("Compare now vs later: " + comparer.compareInstants(now, later));
System.out.println("Compare now vs earlier: " + comparer.compareInstants(now, earlier));
TimeComparer.DurationInfo duration = comparer.calculateDuration(now, later);
System.out.println("Duration between now and later:");
duration.print();
System.out.println("\n=== All Get Current Time Examples Completed ===");
}
}
💻 Formatage de Date et Heure java
🟡 intermediate
⭐⭐⭐
Formater les objets date et heure en chaînes utilisant divers modèles et paramètres régionaux
⏱️ 25 min
🏷️ java, android, datetime
Prerequisites:
Intermediate Java, DateTimeFormatter
// Android Java Date & Time Formatting Examples
// Using java.time.format (API 26+) and SimpleDateFormat
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Calendar;
// 1. Basic Formatting Using Modern API
public class ModernDateFormatter {
// ISO format
public String formatToISO(LocalDateTime localDateTime) {
return localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
// Custom pattern
public String formatWithPattern(LocalDateTime localDateTime, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return localDateTime.format(formatter);
}
// Pre-defined common formats
public String formatDateFull(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return localDateTime.format(formatter);
}
public String formatTimeFull(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
return localDateTime.format(formatter);
}
public String formatDateTimeFull(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return localDateTime.format(formatter);
}
// Short format
public String formatShort(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy/MM/dd HH:mm");
return localDateTime.format(formatter);
}
// With milliseconds
public String formatWithMillis(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
return localDateTime.format(formatter);
}
// With nanoseconds
public String formatWithNanos(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnnnn");
return localDateTime.format(formatter);
}
}
// 2. Localized Formatting
public class LocalizedFormatter {
// Format with locale
public String formatDateLocalized(LocalDateTime localDateTime, Locale locale) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy MMMM dd, EEEE",
locale
);
return localDateTime.format(formatter);
}
// Format in different locales
public java.util.Map<String, String> formatDateInMultipleLocales(LocalDateTime localDateTime) {
java.util.Map<String, Locale> locales = new java.util.HashMap<>();
locales.put("en", Locale.ENGLISH);
locales.put("zh", Locale.CHINESE);
locales.put("es", new Locale("es"));
locales.put("fr", Locale.FRENCH);
locales.put("de", Locale.GERMAN);
locales.put("ja", Locale.JAPANESE);
locales.put("ar", new Locale("ar"));
java.util.Map<String, String> results = new java.util.HashMap<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MMMM dd, EEEE HH:mm");
for (java.util.Map.Entry<String, Locale> entry : locales.entrySet()) {
String formatted = localDateTime.format(formatter.withLocale(entry.getValue()));
results.put(entry.getKey(), formatted);
}
return results;
}
// Format using localized date style
public String formatDateStyle(LocalDateTime localDateTime, Locale locale) {
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedDate(java.time.format.FormatStyle.FULL)
.withLocale(locale);
return localDateTime.format(formatter);
}
// Format using localized time style
public String formatTimeStyle(LocalDateTime localDateTime, Locale locale) {
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedTime(java.time.format.FormatStyle.SHORT)
.withLocale(locale);
return localDateTime.format(formatter);
}
// Format using localized date-time style
public String formatDateTimeStyle(LocalDateTime localDateTime, Locale locale,
java.time.format.FormatStyle style) {
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedDateTime(style)
.withLocale(locale);
return localDateTime.format(formatter);
}
}
// 3. Legacy Formatting (SimpleDateFormat)
public class LegacyDateFormatter {
// Format Date using SimpleDateFormat
public String formatDate(Date date, String pattern) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(date);
}
// Format Calendar
public String formatCalendar(Calendar calendar, String pattern) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(calendar.getTime());
}
// Common formats
public String formatISO(Date date) {
return formatDate(date, "yyyy-MM-dd'T'HH:mm:ss");
}
public String formatReadable(Date date) {
return formatDate(date, "MMMM dd, yyyy 'at' HH:mm");
}
public String formatShort(Date date) {
return formatDate(date, "yy/MM/dd");
}
// Format with locale
public String formatDateWithLocale(Date date, String pattern, Locale locale) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
return formatter.format(date);
}
}
// 4. Pre-defined Formats
public class PredefinedFormats {
// Date only formats
public String formatDateOnly(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return localDateTime.format(formatter);
}
public String formatDateSlash(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
return localDateTime.format(formatter);
}
public String formatDateMonthName(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
return localDateTime.format(formatter);
}
// Time only formats
public String formatTimeOnly(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
return localDateTime.format(formatter);
}
public String formatTime12Hour(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a");
return localDateTime.format(formatter);
}
// Combined formats
public String formatCompact(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
return localDateTime.format(formatter);
}
public String formatHumanReadable(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy 'at' HH:mm");
return localDateTime.format(formatter);
}
// Format for specific use cases
public String formatForFilename(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss");
return localDateTime.format(formatter);
}
public String formatForLog(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
return localDateTime.format(formatter);
}
public String formatForDisplay(LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, h:mm a");
return localDateTime.format(formatter);
}
}
// 5. Relative Time Formatting
public class RelativeTimeFormatter {
public enum TimeScale {
SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
}
public static class TimeDelta {
public long amount;
public TimeScale scale;
public TimeDelta(long amount, TimeScale scale) {
this.amount = amount;
this.scale = scale;
}
@Override
public String toString() {
String unit;
switch (scale) {
case SECOND:
unit = amount == 1 ? "second" : "seconds";
break;
case MINUTE:
unit = amount == 1 ? "minute" : "minutes";
break;
case HOUR:
unit = amount == 1 ? "hour" : "hours";
break;
case DAY:
unit = amount == 1 ? "day" : "days";
break;
case WEEK:
unit = amount == 1 ? "week" : "weeks";
break;
case MONTH:
unit = amount == 1 ? "month" : "months";
break;
case YEAR:
unit = amount == 1 ? "year" : "years";
break;
default:
unit = "";
}
return amount + " " + unit;
}
}
// Calculate time delta
public TimeDelta calculateDelta(Instant past, Instant now) {
long seconds = java.time.Duration.between(past, now).getSeconds();
long absSeconds = Math.abs(seconds);
if (absSeconds < 60) {
return new TimeDelta(absSeconds, TimeScale.SECOND);
} else if (absSeconds < 3600) {
return new TimeDelta(absSeconds / 60, TimeScale.MINUTE);
} else if (absSeconds < 86400) {
return new TimeDelta(absSeconds / 3600, TimeScale.HOUR);
} else if (absSeconds < 604800) {
return new TimeDelta(absSeconds / 86400, TimeScale.DAY);
} else if (absSeconds < 2592000) {
return new TimeDelta(absSeconds / 604800, TimeScale.WEEK);
} else if (absSeconds < 31536000) {
return new TimeDelta(absSeconds / 2592000, TimeScale.MONTH);
} else {
return new TimeDelta(absSeconds / 31536000, TimeScale.YEAR);
}
}
// Format relative time
public String formatRelative(Instant past, Instant now) {
TimeDelta delta = calculateDelta(past, now);
boolean isFuture = past.isAfter(now);
if (delta.amount == 0) {
return "just now";
}
if (isFuture) {
return "in " + delta.toString();
} else {
return delta.toString() + " ago";
}
}
// Format short relative time
public String formatShortRelative(Instant past, Instant now) {
long seconds = java.time.Duration.between(past, now).getSeconds();
long absSeconds = Math.abs(seconds);
boolean isFuture = seconds > 0;
if (absSeconds < 60) {
return isFuture ? "soon" : "now";
} else if (absSeconds < 3600) {
long mins = absSeconds / 60;
return isFuture ? "+" + mins + "m" : "-" + mins + "m";
} else if (absSeconds < 86400) {
long hours = absSeconds / 3600;
return isFuture ? "+" + hours + "h" : "-" + hours + "h";
} else {
long days = absSeconds / 86400;
return isFuture ? "+" + days + "d" : "-" + days + "d";
}
}
}
// 6. Format Conversion
public class FormatConverter {
// Convert LocalDateTime to String
public String toString(LocalDateTime localDateTime, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return localDateTime.format(formatter);
}
// Convert Instant to String in specific timezone
public String toString(Instant instant, ZoneId zone, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return instant.atZone(zone).format(formatter);
}
// Convert legacy Date to String
public String toString(Date date, String pattern) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(date);
}
// Convert legacy Calendar to String
public String toString(Calendar calendar, String pattern) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(calendar.getTime());
}
}
// Main demonstration
public class DateTimeFormattingDemo {
public static void demonstrateDateTimeFormatting() {
System.out.println("=== Android Java Date & Time Formatting Examples ===\n");
LocalDateTime now = LocalDateTime.now();
// 1. Modern formatting
System.out.println("--- 1. Modern API Formatting ---");
ModernDateFormatter modernFormatter = new ModernDateFormatter();
System.out.println("ISO format: " + modernFormatter.formatToISO(now));
System.out.println("Date full: " + modernFormatter.formatDateFull(now));
System.out.println("Time full: " + modernFormatter.formatTimeFull(now));
System.out.println("Date-Time full: " + modernFormatter.formatDateTimeFull(now));
System.out.println("Short: " + modernFormatter.formatShort(now));
System.out.println("With millis: " + modernFormatter.formatWithMillis(now));
System.out.println("Custom (yyyy.MM.dd): " + modernFormatter.formatWithPattern(now, "yyyy.MM.dd"));
// 2. Localized formatting
System.out.println("\n--- 2. Localized Formatting ---");
LocalizedFormatter localizedFormatter = new LocalizedFormatter();
System.out.println("English (US): " + localizedFormatter.formatDateLocalized(now, Locale.US));
System.out.println("French: " + localizedFormatter.formatDateLocalized(now, Locale.FRANCE));
System.out.println("German: " + localizedFormatter.formatDateLocalized(now, Locale.GERMANY));
System.out.println("Chinese: " + localizedFormatter.formatDateLocalized(now, Locale.CHINA));
System.out.println("Japanese: " + localizedFormatter.formatDateLocalized(now, Locale.JAPAN));
// Multiple locales
System.out.println("\nMultiple locales:");
java.util.Map<String, String> formattedDates = localizedFormatter.formatDateInMultipleLocales(now);
for (java.util.Map.Entry<String, String> entry : formattedDates.entrySet()) {
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
}
// 3. Pre-defined formats
System.out.println("\n--- 3. Pre-defined Formats ---");
PredefinedFormats predefined = new PredefinedFormats();
System.out.println("Date only: " + predefined.formatDateOnly(now));
System.out.println("Date slash: " + predefined.formatDateSlash(now));
System.out.println("Month name: " + predefined.formatDateMonthName(now));
System.out.println("Time only: " + predefined.formatTimeOnly(now));
System.out.println("Time 12-hour: " + predefined.formatTime12Hour(now));
System.out.println("Compact: " + predefined.formatCompact(now));
System.out.println("Human readable: " + predefined.formatHumanReadable(now));
System.out.println("Filename: " + predefined.formatForFilename(now));
System.out.println("Log: " + predefined.formatForLog(now));
System.out.println("Display: " + predefined.formatForDisplay(now));
// 4. Legacy formatting
System.out.println("\n--- 4. Legacy API Formatting ---");
LegacyDateFormatter legacyFormatter = new LegacyDateFormatter();
Date currentDate = new Date();
Calendar currentCalendar = Calendar.getInstance();
System.out.println("Legacy ISO: " + legacyFormatter.formatISO(currentDate));
System.out.println("Legacy readable: " + legacyFormatter.formatReadable(currentDate));
System.out.println("Legacy short: " + legacyFormatter.formatShort(currentDate));
System.out.println("Custom (dd-MM-yyyy): " + legacyFormatter.formatDate(currentDate, "dd-MM-yyyy"));
System.out.println("Calendar formatted: " + legacyFormatter.formatCalendar(currentCalendar, "yyyy-MM-dd HH:mm:ss"));
// 5. Relative time
System.out.println("\n--- 5. Relative Time Formatting ---");
RelativeTimeFormatter relativeFormatter = new RelativeTimeFormatter();
Instant currentInstant = Instant.now();
Instant oneMinuteAgo = currentInstant.minusSeconds(60);
Instant oneHourAgo = currentInstant.minusSeconds(3600);
Instant oneDayAgo = currentInstant.minusSeconds(86400);
Instant oneWeekAgo = currentInstant.minusSeconds(604800);
System.out.println("1 minute ago: " + relativeFormatter.formatRelative(oneMinuteAgo, currentInstant));
System.out.println("1 hour ago: " + relativeFormatter.formatRelative(oneHourAgo, currentInstant));
System.out.println("1 day ago: " + relativeFormatter.formatRelative(oneDayAgo, currentInstant));
System.out.println("1 week ago: " + relativeFormatter.formatRelative(oneWeekAgo, currentInstant));
System.out.println("\nShort relative:");
System.out.println("1 minute ago: " + relativeFormatter.formatShortRelative(oneMinuteAgo, currentInstant));
System.out.println("1 hour ago: " + relativeFormatter.formatShortRelative(oneHourAgo, currentInstant));
System.out.println("1 day ago: " + relativeFormatter.formatShortRelative(oneDayAgo, currentInstant));
System.out.println("\n=== All Date & Time Formatting Examples Completed ===");
}
}
💻 Analyse de Date et Heure java
🟡 intermediate
⭐⭐⭐
Analyser les chaînes de date en objets date utilisant divers formats et gérer les erreurs d'analyse
⏱️ 30 min
🏷️ java, android, datetime
Prerequisites:
Intermediate Java, DateTimeFormatter
// Android Java Date & Time Parsing Examples
// Using java.time.format (API 26+) and SimpleDateFormat
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Calendar;
import java.util.Locale;
// 1. Basic Parsing Using Modern API
public class ModernDateParser {
// Parse from ISO format
public LocalDateTime parseFromISO(String text) throws DateTimeParseException {
return LocalDateTime.parse(text, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
// Parse from custom pattern
public LocalDateTime parseWithPattern(String text, String pattern) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(text, formatter);
}
// Parse date only
public LocalDate parseDate(String text, String pattern) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(text, formatter);
}
// Parse time only
public LocalTime parseTime(String text, String pattern) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalTime.parse(text, formatter);
}
// Parse zoned datetime
public ZonedDateTime parseZoned(String text, String pattern) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return ZonedDateTime.parse(text, formatter);
}
}
// 2. Safe Parsing with Error Handling
public class SafeDateParser {
public static class ParseResult<T> {
public boolean success;
public T value;
public String error;
public ParseResult(boolean success, T value, String error) {
this.success = success;
this.value = value;
this.error = error;
}
public static <T> ParseResult<T> success(T value) {
return new ParseResult<>(true, value, null);
}
public static <T> ParseResult<T> failure(String error) {
return new ParseResult<>(false, null, error);
}
}
// Try parse with default value
public LocalDateTime tryParse(String text, String pattern, LocalDateTime defaultValue) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(text, formatter);
} catch (DateTimeParseException e) {
return defaultValue;
}
}
// Try parse with result
public ParseResult<LocalDateTime> tryParse(String text, String pattern) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime result = LocalDateTime.parse(text, formatter);
return ParseResult.success(result);
} catch (DateTimeParseException e) {
return ParseResult.failure("Parse error: " + e.getMessage());
}
}
// Parse with multiple patterns
public ParseResult<LocalDateTime> parseWithMultiplePatterns(String text, String[] patterns) {
for (String pattern : patterns) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime result = LocalDateTime.parse(text, formatter);
return ParseResult.success(result);
} catch (DateTimeParseException e) {
// Try next pattern
}
}
return ParseResult.failure("No matching pattern found");
}
// Parse or null
public LocalDateTime parseOrNull(String text, String pattern) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(text, formatter);
} catch (DateTimeParseException e) {
return null;
}
}
}
// 3. Parse Common Formats
public class CommonFormatParser {
// Parse ISO date (yyyy-MM-dd)
public LocalDate parseISODate(String text) throws DateTimeParseException {
return LocalDate.parse(text);
}
// Parse ISO time (HH:mm:ss)
public LocalTime parseISOTime(String text) throws DateTimeParseException {
return LocalTime.parse(text);
}
// Parse US format (MM/dd/yyyy)
public LocalDate parseUSFormat(String text) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
return LocalDate.parse(text, formatter);
}
// Parse European format (dd/MM/yyyy)
public LocalDate parseEuropeanFormat(String text) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
return LocalDate.parse(text, formatter);
}
// Parse compact format (yyyyMMdd)
public LocalDate parseCompactFormat(String text) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
return LocalDate.parse(text, formatter);
}
// Parse readable format (MMMM dd, yyyy)
public LocalDate parseReadableFormat(String text) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
return LocalDate.parse(text, formatter);
}
// Parse with time (yyyy-MM-dd HH:mm:ss)
public LocalDateTime parseWithTime(String text) throws DateTimeParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.parse(text, formatter);
}
}
// 4. Legacy Parsing (SimpleDateFormat)
public class LegacyDateParser {
// Parse string to Date
public Date parseDate(String text, String pattern) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.parse(text);
}
// Parse with locale
public Date parseDate(String text, String pattern, Locale locale) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
return formatter.parse(text);
}
// Try parse with default
public Date tryParse(String text, String pattern, Date defaultValue) {
try {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.parse(text);
} catch (ParseException e) {
return defaultValue;
}
}
// Parse to Calendar
public Calendar parseToCalendar(String text, String pattern) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date date = formatter.parse(text);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
}
// 5. Flexible Parsing
public class FlexibleParser {
// Auto-detect format
public LocalDateTime autoDetect(String text) {
String[] patterns = {
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy/MM/dd HH:mm:ss",
"dd/MM/yyyy HH:mm:ss",
"MM-dd-yyyy HH:mm:ss",
"yyyyMMdd HHmmss"
};
SafeDateParser parser = new SafeDateParser();
SafeDateParser.ParseResult<LocalDateTime> result = parser.parseWithMultiplePatterns(text, patterns);
if (result.success) {
return result.value;
} else {
throw new IllegalArgumentException("Unable to parse date: " + text);
}
}
// Parse with lenient mode
public LocalDateTime parseLenient(String text, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
try {
return LocalDateTime.parse(text, formatter);
} catch (DateTimeParseException e) {
// Try lenient parsing with legacy API
try {
SimpleDateFormat legacyFormatter = new SimpleDateFormat(pattern);
legacyFormatter.setLenient(true);
Date date = legacyFormatter.parse(text);
return LocalDateTime.ofInstant(date.toInstant(), java.time.ZoneId.systemDefault());
} catch (ParseException pe) {
throw new IllegalArgumentException("Lenient parsing failed", pe);
}
}
}
// Parse and normalize
public LocalDateTime parseAndNormalize(String text) {
// Trim whitespace
text = text.trim();
// Try standard patterns
String[] patterns = {
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd",
"MM/dd/yyyy",
"dd/MM/yyyy"
};
for (String pattern : patterns) {
try {
if (pattern.length() == text.length() || pattern.contains("y") && pattern.contains("M") && pattern.contains("d")) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(text, formatter);
}
} catch (DateTimeParseException e) {
// Continue
}
}
throw new IllegalArgumentException("Unable to parse and normalize: " + text);
}
}
// 6. Validation
public class DateValidator {
// Check if string is valid date
public boolean isValidDate(String text, String pattern) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDate.parse(text, formatter);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
// Validate date is in valid range
public boolean isValidRange(LocalDate date, LocalDate min, LocalDate max) {
return !date.isBefore(min) && !date.isAfter(max);
}
// Check if string matches pattern
public boolean matchesPattern(String text, String pattern) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDate.parse(text, formatter);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
// Validate and parse
public SafeDateParser.ParseResult<LocalDate> validateAndParse(String text, String pattern) {
if (!matchesPattern(text, pattern)) {
return SafeDateParser.failure("Invalid format");
}
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDate result = LocalDate.parse(text, formatter);
return SafeDateParser.success(result);
} catch (DateTimeParseException e) {
return SafeDateParser.failure("Validation failed: " + e.getMessage());
}
}
}
// 7. Batch Parsing
public class BatchParser {
// Parse multiple dates
public java.util.List<LocalDate> parseMultiple(java.util.List<String> texts, String pattern) {
java.util.List<LocalDate> results = new java.util.ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
for (String text : texts) {
try {
LocalDate date = LocalDate.parse(text, formatter);
results.add(date);
} catch (DateTimeParseException e) {
// Skip invalid dates
}
}
return results;
}
// Parse with success/failure tracking
public static class BatchParseResult {
public java.util.List<LocalDate> successes = new java.util.ArrayList<>();
public java.util.Map<String, String> failures = new java.util.HashMap<>();
public void addSuccess(LocalDate date) {
successes.add(date);
}
public void addFailure(String input, String error) {
failures.put(input, error);
}
public void printSummary() {
System.out.println("Successes: " + successes.size());
System.out.println("Failures: " + failures.size());
if (!failures.isEmpty()) {
System.out.println("Failed inputs:");
for (java.util.Map.Entry<String, String> entry : failures.entrySet()) {
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
}
}
}
}
public BatchParseResult parseBatch(java.util.List<String> texts, String pattern) {
BatchParseResult result = new BatchParseResult();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
for (String text : texts) {
try {
LocalDate date = LocalDate.parse(text, formatter);
result.addSuccess(date);
} catch (DateTimeParseException e) {
result.addFailure(text, e.getMessage());
}
}
return result;
}
}
// Main demonstration
public class DateTimeParsingDemo {
public static void demonstrateDateTimeParsing() {
System.out.println("=== Android Java Date & Time Parsing Examples ===\n");
// 1. Basic parsing
System.out.println("--- 1. Basic Parsing ---");
ModernDateParser modernParser = new ModernDateParser();
try {
LocalDateTime dateTime1 = modernParser.parseWithPattern("2024-12-28 15:30:45", "yyyy-MM-dd HH:mm:ss");
System.out.println("Parsed: " + dateTime1);
LocalDate date = modernParser.parseDate("2024-12-28", "yyyy-MM-dd");
System.out.println("Parsed date: " + date);
LocalTime time = modernParser.parseTime("15:30:45", "HH:mm:ss");
System.out.println("Parsed time: " + time);
} catch (DateTimeParseException e) {
System.out.println("Parse error: " + e.getMessage());
}
// 2. Common formats
System.out.println("\n--- 2. Common Formats ---");
CommonFormatParser commonParser = new CommonFormatParser();
try {
LocalDate isoDate = commonParser.parseISODate("2024-12-28");
System.out.println("ISO date: " + isoDate);
LocalDate usDate = commonParser.parseUSFormat("12/28/2024");
System.out.println("US format: " + usDate);
LocalDate euDate = commonParser.parseEuropeanFormat("28/12/2024");
System.out.println("European format: " + euDate);
LocalDate compactDate = commonParser.parseCompactFormat("20241228");
System.out.println("Compact format: " + compactDate);
LocalDate readableDate = commonParser.parseReadableFormat("December 28, 2024");
System.out.println("Readable format: " + readableDate);
LocalDateTime withTime = commonParser.parseWithTime("2024-12-28 15:30:45");
System.out.println("With time: " + withTime);
} catch (DateTimeParseException e) {
System.out.println("Parse error: " + e.getMessage());
}
// 3. Safe parsing
System.out.println("\n--- 3. Safe Parsing ---");
SafeDateParser safeParser = new SafeDateParser();
LocalDateTime defaultValue = LocalDateTime.now();
LocalDateTime parsed = safeParser.tryParse("2024-12-28 15:30:45", "yyyy-MM-dd HH:mm:ss", defaultValue);
System.out.println("Try parse (valid): " + parsed);
LocalDateTime parsedInvalid = safeParser.tryParse("invalid", "yyyy-MM-dd HH:mm:ss", defaultValue);
System.out.println("Try parse (invalid): " + parsedInvalid);
SafeDateParser.ParseResult<LocalDateTime> result = safeParser.tryParse("2024-12-28 15:30:45", "yyyy-MM-dd HH:mm:ss");
System.out.println("Parse result: success=" + result.success + ", value=" + result.value);
// 4. Multiple patterns
System.out.println("\n--- 4. Parse with Multiple Patterns ---");
String[] patterns = {"yyyy-MM-dd", "MM/dd/yyyy", "dd/MM/yyyy", "yyyyMMdd"};
SafeDateParser.ParseResult<LocalDateTime> multiResult = safeParser.parseWithMultiplePatterns("12/28/2024", patterns);
System.out.println("Multi-pattern parse: success=" + multiResult.success + ", value=" + multiResult.value);
// 5. Legacy parsing
System.out.println("\n--- 5. Legacy API Parsing ---");
LegacyDateParser legacyParser = new LegacyDateParser();
try {
Date legacyDate = legacyParser.parseDate("12/28/2024 15:30", "MM/dd/yyyy HH:mm");
System.out.println("Legacy date: " + legacyDate);
Calendar legacyCalendar = legacyParser.parseToCalendar("12/28/2024", "MM/dd/yyyy");
System.out.println("Legacy calendar: " + legacyCalendar.getTime());
Date tryLegacy = legacyParser.tryParse("invalid", "MM/dd/yyyy", new Date());
System.out.println("Try parse legacy (fallback): " + tryLegacy);
} catch (ParseException e) {
System.out.println("Legacy parse error: " + e.getMessage());
}
// 6. Validation
System.out.println("\n--- 6. Date Validation ---");
DateValidator validator = new DateValidator();
System.out.println("Valid date '2024-12-28': " + validator.isValidDate("2024-12-28", "yyyy-MM-dd"));
System.out.println("Invalid date '2024-13-45': " + validator.isValidDate("2024-13-45", "yyyy-MM-dd"));
LocalDate validDate = LocalDate.of(2024, 12, 28);
LocalDate minDate = LocalDate.of(2024, 1, 1);
LocalDate maxDate = LocalDate.of(2024, 12, 31);
System.out.println("In range: " + validator.isValidRange(validDate, minDate, maxDate));
// 7. Batch parsing
System.out.println("\n--- 7. Batch Parsing ---");
BatchParser batchParser = new BatchParser();
java.util.List<String> dateStrings = new java.util.ArrayList<>();
dateStrings.add("2024-12-28");
dateStrings.add("2024-12-29");
dateStrings.add("invalid");
dateStrings.add("2024-12-30");
BatchParser.BatchParseResult batchResult = batchParser.parseBatch(dateStrings, "yyyy-MM-dd");
batchResult.printSummary();
System.out.println("\n=== All Date & Time Parsing Examples Completed ===");
}
}