我使用API来获取天气预报直到Java中的特定日期。
将日期作为URL参数传递的要求是它必须采用“YYYY-MM-DD'T'HH:MM:SS”格式。我从用户那里获得这种格式的输入,然后获取当前的系统日期,然后循环直到所需的日期。问题在于将输入日期字符串转换为日期格式,将其递增一天,然后将其转换回URL参数的字符串格式。
我使用以下代码执行此操作但它给我的结果不正确:
formatter = new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS");
Date date1 = formatter.parse(inputtime);
System.out.println(date1);
Calendar c1 = Calendar.getInstance();
c1.setTime(date1);
c1.add(Calendar.DAY_OF_MONTH, 1); // number of days to add
inputtime = formatter.format(c1.getTime()); // dt is now the new date
System.out.println(c1.getTime());
System.out.println(inputtime);
inputtime
是用户的输入。如果我将“2014-04-12T00:00:00”设为inputtime
,则date1
为“Sun Dec 29 00:00:00 PKT 2013”,c1.getTime()
返回“Mon Dec” 30 00:00:00 PKT 2013“和inputtime
根据上面的代码块变为”2014-12-364T00:12:00“。
如何纠正此逻辑错误?
答案 0 :(得分:1)
您应该考虑SimpleDateFormat日期和时间模式:link
例如,像这样:
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
答案 1 :(得分:1)
尝试从
更改日期模式new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS");
到
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Letter Date or Time Component Presentation Examples y Year Year 1996; 96 M Month in year Month July; Jul; 07 D Day in year Number 189 d Day in month Number 10 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978
答案 2 :(得分:1)
与Java捆绑在一起的java.util.Date和.Calendar类非常麻烦。避免它们。
该格式由ISO 8601标准定义。 Joda-Time库遵循该标准的格式作为解析和生成字符串的默认格式。 Java 8中新的java.time包也是如此。
您的字符串省略了时区偏移。因此,您需要知道并指定该字符串所需的时区。也许时区是UTC,意味着时区偏移为零。
一天不总是24小时。如果您的意思是24小时而不是1天,请调用方法plusHours( 24 )
。
以下是Joda-Time 2.3中的示例代码。
String input = "2014-01-02T03:04:05";
DateTimeZone timeZone = DateTimeZone.UTC;
DateTime dateTime = new DateTime( input, timeZone );
DateTime tomorrow = dateTime.plusDays( 1 );
String outputWithOffset = tomorrow.toString();
String output = ISODateTimeFormat.dateHourMinuteSecond().print( tomorrow );