Подтвердить что ты не робот

Как получить формат строки даты (шаблон) в 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).

Может ли кто-нибудь сказать мне, как я могу добиться этого?

4b9b3361

Ответ 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,})