Как получить формат строки даты (шаблон) в java?
Я хочу получить формат данной строки даты.
Пример: у меня есть строка типа 2011-09-27T07:04:21.97-05:00
, а формат даты этой строки - yyyy-MM-dd'T'HH:mm:ss.SSS
.
Здесь я хочу узнать этот формат даты, когда передаю строку (2011-09-27T07:04:21.97-05:00
) методу, который вернет формат (yyyy-MM-dd'T'HH:mm:ss.SSS
), а затем я буду форматировать мою указанную строку даты в соответствии с моим требованием (like yy-mm--dd or mm/dd/yyyy
).
Может ли кто-нибудь сказать мне, как я могу добиться этого?
Ответы
Ответ 1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NewClass {
private static final String[] formats = {
"yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss",
"MM/dd/yyyy HH:mm:ss", "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
"MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS",
"MM/dd/yyyy'T'HH:mm:ssZ", "MM/dd/yyyy'T'HH:mm:ss",
"yyyy:MM:dd HH:mm:ss", "yyyyMMdd", };
/*
* @param args
*/
public static void main(String[] args) {
String yyyyMMdd = "20110917";
parse(yyyyMMdd);
}
public static void parse(String d) {
if (d != null) {
for (String parse : formats) {
SimpleDateFormat sdf = new SimpleDateFormat(parse);
try {
sdf.parse(d);
System.out.println("Printing the value of " + parse);
} catch (ParseException e) {
}
}
}
}
}
Ответ 2
вы можете сделать так, я не знаю, хорошо или нет, но попробуйте это
сначала создайте объект SimpleDateFormat
SimpleDateFormt sdf = new SimpleDateFormat("yyyy-MM-dd 'T' HH:mm:ss.SSS");
теперь, когда вы проверяете дату, если это будет проанализировано в этом формате, а затем измените в соответствии с вашим форматом
try{
Date date = sdf.parse(yourdate);
sdf.applyPattern("yy-mm--dd or mm/dd/yyyy");
String dateformat = sdf.format(date);
}catch(Exception ex) { // here forgot the exact exception class Parse exception was used
// do something here
}
обновленное сообщение:
Возврат формата даты из неизвестного формата строки даты в java
Как преобразовать String в Date без знания формата?
Разбор любой даты в Java
Ответ 3
Я думаю, вам следует попытаться разобрать входную строку с некоторыми шаблонами предопределения. Тот, который работает, тот, который вам нужен. Помните, что некоторые шаблоны довольно сложны.
01.12.12 - 01 декабря 2012 года в Европе, но 12 января 2012 года в США. Это может быть и 12 декабря 2001 года.
Ответ 4
Если я правильно вас понимаю, вы хотите проанализировать произвольные строки (то есть строку формата, который вы не знаете) в качестве дат, используя DateFormat.parse()
? Затем вам приходится иметь дело с проблемами, как обращаться с 01-02-03
(2 января 2003 года 1 февраля 2003 года и т.д.).
Вы должны знать хотя бы что-то о ожидаемом формате, например, о выборе нескольких предопределенных форматов для ввода.
Ответ 5
Код Madhu - это тренировка, но некоторые проблемы с производительностью возникнут, потому что каждый случай сбоя вызовет исключение.
я думаю, нам нужно найти решение выражения регулятора, чтобы найти шаблонную форму данной даты String.
вы можете найти все наиболее распространенные выражения в формате даты и времени по следующей ссылке
http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1
Ответ 6
Вам нужно будет взять строку inital date и скрыть ее до объекта даты и передать этот преобразованный объект даты и отформатировать его до нужной строки.
Ответ 7
Вы можете попробовать dateparser.
Он может автоматически распознавать любую строку и анализировать ее в дату, календарь, LocalDateTime, OffsetDateTime и быстро (1us~1.5us
).
Он не основан на natural language analyzer
, SimpleDateFormat
или regex.Pattern
.
При этом вам не нужно готовить какие-либо подходящие шаблоны, такие как yyyy-MM-dd'T'HH:mm:ss'Z'
или MM/dd/yyyy HH:mm:ss
и т. Д.:
Date date = DateParserUtils.parseDate("2015-04-29T10:15:00.500+0000");
Calendar calendar = DateParserUtils.parseCalendar("2015-04-29T10:15:00.500Z");
LocalDateTime dateTime = DateParserUtils.parseDateTime("2015-04-29 10:15:00.500 +00:00");
И он имеет лучшую производительность, чем несколько циклов SimpleDateFormat
.
Пожалуйста, наслаждайтесь этим.
Ответ 8
HH:mm:ss.SSS => ([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(.)([0-9]{1,3})
yyyy-mm-dd => ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,})