【发布时间】:2017-09-05 10:16:22
【问题描述】:
我有一个日期为String,但有时它没有有效的日期或月份(值为零,00)。
例子:
String value = "03082017";
然后我做:
String day = value.substring(0,2);
String month = value.substring(2,4);
String year = value.substring(4,8);
if(day.equals("00")) {
day = "01";
}
if(month.equals("00")) {
month = "01";
}
value = day + month + year;
这适用于示例String。
现在我有了这个字符串:
String value = "00092017" //ddMMyyyy
然后我的代码将00 day 转换为01。
这适用于模式ddMMyyyy,但现在是我的问题:我可以有不同的模式:ddMMyyyy 或 MMddyyyy 或 yyyy/dd/MM 等
我的解决方案是首先检查模式(例如MMddyyyy),然后查看我的值03092017(ddMMyyyy)并将数字带到我的日期字符串中,其中位于我的模式中的位置dd。
所以代码的模式是ddMMyyyy,但值是03092017 (MMddyyyy)
String day = "03";
.....
我的代码:
public void doSomething(String valueWithDate, String pattern){
// now I become:
// valueWithDate = 01092017
// pattern = ddMMyyyy
String day = valueWithDate.substring(0,2);
String month = valueWithDate.substring(2,4);
String year = valueWithDate.substring(4,8);
//Works I get my information but what is when I get other pattern/value? for example:
// valueWithDate = 09082017
// pattern = MMddyyyy
// now I want my information again, but day is not on substring 0,2
}
【问题讨论】:
-
为什么不直接使用日期格式化程序?
-
如何检查模式?任何小于或等于 12 的日期和月份都是有效的,但可能是错误的方式......
-
除非这是出于教育目的:不要不要重新发明轮子。 Java 有很多选项可以进行日期解析......当你限制自己使用 Java8 添加的东西时 - 你会得到很多非常有用的东西。
-
这听起来不可能。您如何确定 11032017 是 3 月 11 日还是 11 月 3 日?在 11002017 中,如何判断是缺日还是缺月?
-
也许更好理解:我的方法得到 2 个字符串:值和模式,当值为 00082017 //ddMMyyyy 并且模式是 ddMMyyyy 现在在我的方法中我有 3 个字符串:日 = 月 = 和年 = 现在我将填写字符串日 = 00 月 = 08 年 = 2017 我该怎么做?我在第一篇文章中的示例有效,但是当我得到值 09002017 和模式 MMddyyyy 那么它不起作用
标签: java date zero date-parsing dayofmonth