public class Kf_Date {
public static String getDateUsingOracleFormat(String date) {
try {
DateFormat inputFormat = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss.S");
Date date2 = inputFormat.parse(date);
SimpleDateFormat sdf = new SimpleDateFormat("YYY-MM-dd");
String outputText = sdf.format(date2);
return outputText;
} catch(Exception e) {
e.printStackTrace();
return e.toString();
}
}
public static void main(String... args) {
System.out.println(new Kf_Date().getDateUsingOracleFormat("2018-08-02T00:00:00+05:30"));
}
}
5条答案
按热度按时间0pizxfdo1#
您可以使用
DateTimeFormatter
:上面的
parse
调用理解输入的ISO格式。这是较新的推荐API。如果您使用的Java版本早于8,您应该用途:
这将返回相同的字符串。
a0x5cqrl2#
Java.时间
使用此方法声明,
main
将打印:2018-08-02
你的格式(您正在解析的和您正在生成的)符合ISO 8601(链接在底部)。java.time的类,现代的Java日期和时间API,解析和打印这种格式作为它们的默认值,也就是说,没有任何显式的格式化程序。格式化程序也是内置的,所以我使用一个来指定我们希望格式化的日期不包含时间和UTC的偏移量。不需要编写自己的格式化程序这一容易出错的任务。
您的代码中出现了什么错误?
正如其他人所说,您的格式模式字符串与您试图解析的日期-时间字符串100%不匹配。该格式要求在秒之后应该有一个点和几个毫秒。相反,您的字符串有一个偏移量,
+05:30
。这会导致异常。相比之下,单参数OffsetDateTime.parse
接受带毫秒和不带毫秒的字符串(因为它们在ISO 8601中是可选的)(但需要偏移)。你的代码里还有一个错误在要格式化的格式模式中使用大写的
YYY
。这有时会给予您错误的年份。小写的y
表示纪元年。大写的Y
表示星期年,仅对星期编号有用。顺便说一句,因为你的方法是静态的,所以你不需要创建一个示例来调用它。
链接
java.time
。egdjgwm83#
可以按如下方式使用ISO图案:
mnemlml84#
您的代码除了这一行之外都是正确的。在输入模式中使用XXX代替**.S**:
根据Class SimpleDateFormat:
*X-时区,ISO 8601时区 (-08;-0080; -08:-00)
*S-毫秒,编号 (978)
提示:
如果你在解析日期字符串时遇到问题,并且不知道你的模式有什么问题,那么就打印当前日期,并将其与输入字符串进行比较,然后你就可以看到差异并修复模式:
eqoofvh95#
您可以使用此方法查找可用时区
找到你想要的时区后使用下面的代码