Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日期格式:将任何日期格式转换为特定的日期格式_Java_Jodatime_Date Formatting_Dateformatter - Fatal编程技术网

Java日期格式:将任何日期格式转换为特定的日期格式

Java日期格式:将任何日期格式转换为特定的日期格式,java,jodatime,date-formatting,dateformatter,Java,Jodatime,Date Formatting,Dateformatter,我有一个特定的要求,第三方应用程序为我的应用程序提供数据。数据被插入到各种(取决于数据代理)Oracle数据库表中。该数据包含一个或多个数据类型为“带时区的时间戳(6)”的列。我的应用程序使用这些表中的数据 我的问题是,从这些代理收到的日期格式不同(也取决于向表中插入数据的代理)。我必须处理所有这些格式,如果明天遇到新格式,我的应用程序将抛出异常并跳过该记录。我使用“joda time”库使用下面的示例代码处理这种情况 例如— DateTimeParser[] parsers1

我有一个特定的要求,第三方应用程序为我的应用程序提供数据。数据被插入到各种(取决于数据代理)Oracle数据库表中。该数据包含一个或多个数据类型为“带时区的时间戳(6)”的列。我的应用程序使用这些表中的数据

我的问题是,从这些代理收到的日期格式不同(也取决于向表中插入数据的代理)。我必须处理所有这些格式,如果明天遇到新格式,我的应用程序将抛出异常并跳过该记录。我使用“joda time”库使用下面的示例代码处理这种情况

例如—

        DateTimeParser[] parsers1 = { DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z").getParser(),
            DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss a Z").getParser(),
            DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS Z").getParser(),
            DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSSSSS Z").getParser(),

            DateTimeFormat.forPattern("yyyy.MM.dd HH:mm:ss Z").getParser(),
            DateTimeFormat.forPattern("yyyy.MM.dd HH:mm:ss a Z").getParser(),
            DateTimeFormat.forPattern("yyyy.MM.dd HH:mm:ss.SSS Z").getParser(),
            DateTimeFormat.forPattern("yyyy.MM.dd HH:mm:ss.SSSSSS Z").getParser(),

            DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss Z").getParser(),
            DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss a Z").getParser(),
            DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss.SSS Z").getParser(),
            DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss.SSSSSS Z").getParser()

    }; // Here i have to take care of too many date formats 

    DateTimeFormatter dateStringFormat = new DateTimeFormatterBuilder().append(null, parsers1).toFormatter()
            .withOffsetParsed();

    // This code throws exception
    DateTime date = DateTime.parse(dateString, dateStringFormat);

    // This should be my final  date format 
    String profileImportDate = date.toString("yyyy-MM-dd'T'HH:mm:ss ZZ");
array DateTimeParser保留了我的应用程序应该接收的所有格式,但是假设明天有一个新的格式需要,我必须更改处理该格式的代码


我不想逐案处理这种情况,而是想用一种统一的方式,通过这种方式,我可以将带有任何模式的日期转换为我的模式,即“yyy-MM-dd'T'HH:MM:ss-ZZ”

不可能。你如何处理我刚发明的日期格式?日是十六进制的,月是用葡萄牙语写的,年是二进制的。今天是
1D-janeiro-11111100100
。显然有些夸张,但你明白我的意思。接受“任何”日期格式是不可接受的要求,因为“任何”意味着任何。“从这些代理收到的日期格式各不相同”这里的问题是您的接口定义不明确。你试图容忍垃圾,所以他们提供垃圾。更严格地定义你的接口,并给他们一个他们必须遵守的格式。“我必须更改代码句柄的格式”在配置文件中保留一个允许的格式列表。让您的应用程序读取配置文件中的格式。我阅读了这个问题,因为“代理”是其他人在做的,数据已经作为时间戳(6)存在于数据库中,不需要任何解析,您使用什么从时间戳(6)中提取数据列?为什么提供日期的代理不提供模式?这样,您的程序可以处理“任何”模式。