Как получить заданный формат строки даты (шаблон) в Java? - PullRequest
36 голосов
/ 28 сентября 2011

Я хочу получить формат заданной строки даты.

Пример: у меня есть строка типа 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).

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

Ответы [ 7 ]

43 голосов
/ 12 октября 2011
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) {

                }
            }
        }
    }
}
6 голосов
/ 28 сентября 2011

вы можете сделать так, я не знаю, хороший путь или нет, но попробуйте это

сначала создайте объект 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

Как преобразовать строку в дату, не зная формат?

Разбор любой даты на Java

3 голосов
/ 28 сентября 2011

Я думаю, вы должны попытаться проанализировать входную строку с некоторыми предопределенными шаблонами.Тот, который работает, тот, который вам нужен.Помните, что некоторые шаблоны довольно хитры.

01.12.12 - это 01 декабря 2012 года в Европе, но 12 января 2012 года в США.Это может быть и 12 декабря 2001 года.

2 голосов
/ 12 ноября 2012

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

Вы можете найти все большинство всех регулярных выражений в формате даты и времени в следующей ссылке

http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1

2 голосов
/ 28 сентября 2011

Если я правильно вас понимаю, вы хотите проанализировать произвольные строки (то есть строки в неизвестном формате) как даты с использованием DateFormat.parse()?Затем вам нужно разобраться с такими вопросами, как: 01-02-03 (2 января 2003 г., 1 февраля 2003 г. и т. Д.)выбор из нескольких предопределенных форматов для вашего ввода.

0 голосов
/ 12 октября 2012
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,})
0 голосов
/ 28 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...