Рубрики
Без рубрики

Преобразуйте строку в дату, Дату в строку на Java

Преобразовать строку в дату на Java, Преобразовать дату в строку на Java, Строка Java в дату, Дата Java в строку, строка формата даты java, строка синтаксического анализа java в дату

Автор оригинала: Pankaj Kumar.

Иногда нам приходится конвертировать строку в дату в программе java или конвертировать Дату в строку в другом формате для печати.

Преобразовать строку в дату

Вот простой сценарий, в котором нам придется преобразовать строку в дату на Java. Строка является одним из наиболее широко используемых объектов в Java. Если вы работаете в веб-службах или веб-приложениях с формой, вы получаете дату в виде строкового объекта. Поэтому на стороне сервера мы должны преобразовать строку в объект Даты.

Преобразовать дату в строку

Аналогично, при отображении информации о дате на любой веб-странице мы должны преобразовать дату в строку в требуемом формате. Это очень распространенный процесс, и вы увидите ту или иную форму даты почти на всех веб-сайтах.

Преобразование строки в дату в Java

У нас есть некоторые специальные классы в java для форматирования даты в строку. java.text.DateFormat является абстрактным классом для форматирования даты/Времени. java.text.SimpleDateFormat – это конкретный класс, который мы используем для преобразования строки в дату и для преобразования даты в строку в различных форматах.

Давайте посмотрим, как преобразовать строку в дату и преобразовать дату в строку в программе java.

package com.journaldev.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * Convert String to Date in Java Example
 * Convert Date to String in Java Example
 * 
 * @author pankaj
 *
 */
public class DateUtils {
	public static void main(String[] args) {
		// initialize SimpleDateFormat object
		DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

		try {
			// Convert String to Date in java
			Date today = sdf.parse("14/11/2012");
			System.out.println("Date is : " + today.toString());

			// using locale
			sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.CHINESE);
			DateFormat sdf1 = new SimpleDateFormat("dd-MMM-yyyy", Locale.CANADA_FRENCH);

			
			today = new Date();
			System.out.println("Default Date is : " + today.toString());

			// Convert Date to String in Java
			System.out.println("CHINESE Format Date : "+sdf.format(today));
			System.out.println("CANADA_FRENCH Format Date : "+sdf1.format(today));

		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

Из примера ясно, что мы используем метод parse(String str) для преобразования строки в объект Даты.

Для преобразования Даты в строку мы используем формат(Дата дата) метод. Обратите внимание, что реализация обоих этих методов предусмотрена в DateFormat классе и SimpleDateFormat наследует их через наследование java .

Класс DateFormat также поддерживает преобразования, зависящие от часового пояса и локали. Вот почему вы увидите, что выходные данные вышеупомянутой программы зависят от информации о локали, предоставленной во время создания экземпляра SimpleDateFormat.

Символы формата DateFormat

Как и регулярное выражение java , мы должны использовать определенные символы для создания шаблона, который будет использоваться классом формата даты. Вот список всех важных персонажей, которых мы должны знать:

G н. э., Британская Колумбия Обозначение Эпохи
y 2012, 12 Год
M Август, 08 Месяц в году
w 27, 52 Неделя в году
W 2, 4 неделя в месяце
d 12, 31 День в месяце
D 365, 123 День в году
u 1, 7 День номер недели,
a УТРА, ВЕЧЕРА Маркер AM/PM
H 23 час в день (0-23)
k 22 час в день (1-24)
K 10 час в AM/PM (0-11)
m 23 минута в час (0-59)
s 43 Секунды в минуту (0-59)
S 567 миллисекунды (0-999)
z PST, CST, GMT Общий часовой пояс
Z -0800 Часовой пояс RFC 822
X -08, -08:00 Часовой пояс ISO 8601

Строка Формата Даты Java

Давайте немного расширим нашу программу, чтобы поддерживать несколько форматов строк при анализе на сегодняшний день. Эта ситуация может возникнуть, если у вас есть веб-страница или поле XML, которое поддерживает несколько форматов для передачи даты в виде строки.

package com.journaldev.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class StringToDateUtil {

	private List sdfList;

	// set the List of Format's you want to use
	public StringToDateUtil(List sdfList) throws Exception {
		if (sdfList == null)
			throw new Exception("sdfList can't be null");
		this.sdfList = sdfList;
	}

	public Date stringToDate(String str) throws Exception {
		if (str == null)
			return null;
		Date date = null;
		// parse the input String with list of SimpleDateFormats we have
		for (SimpleDateFormat sdf : sdfList) {
			try {
				date = sdf.parse(str);
			} catch (ParseException pe) {
				// do nothing, we need to try other format
			}
			// check if parsed successfully?
			if (date != null)
				break;
		}
		// return date if parsed successfully or else throw exception
		if (date != null)
			return date;
		throw new Exception("invalid format for String:" + str);
	}

	public static void main(String args[]) throws Exception {
		List formatList = new ArrayList<>();
		formatList.add(new SimpleDateFormat("dd MMM yyyy"));
		formatList.add(new SimpleDateFormat("M/dd/yyyy"));
		formatList.add(new SimpleDateFormat("M/dd/yyyy hh:mm:ss a"));
		
		StringToDateUtil sdUtil = new StringToDateUtil(formatList);
		// Lets format some String to Date
		
		String[] arr = { "10 NOV 2012", "10/14/2012", "10/14/2012 10:45:30", "ABC", null };
		for (String str : arr) {
			try {
				System.out.println(str + " Date Object = " + sdUtil.stringToDate(str));
			} catch (Exception e) {
				System.out.println(str + " is not a valid date");
			}
		}
	}

}

В приведенном выше классе мы передаем все строки формата даты, которые мы ожидаем, а затем stringToDate(String str) метод использует их для анализа данной строки.

Вот результат работы вышеприведенной программы.

10 NOV 2012 Date Object = Sat Nov 10 00:00:00 IST 2012
10/14/2012 Date Object = Sun Oct 14 00:00:00 IST 2012
10/14/2012 10:45:30 Date Object = Sun Oct 14 00:00:00 IST 2012
ABC is not a valid date
null Date Object = null

Обратите внимание, что вы должны создать статический объект для списка форматов в своем приложении, а не инициализировать его все время.

Возможно, вы также захотите создать одноэлементный класс для этой цели.

Класс DateFormat не является потокобезопасным. Поэтому, если вы хотите обеспечить потокобезопасность, вам необходимо создать класс-оболочку для SimpleDateFormat и реализовать методы синхронизированного формата и анализа, которые внутренне вызывают методы DateFormat.

Обновление : Java 8 новый API даты и времени обеспечивает простой и стандартный подход к обработке синтаксического анализа и форматирования даты, вы должны проверить это в Java 8 Дата учебник.