如何将URL中使用的日期格式化为参数

时间:2014-04-11 14:43:58

标签: java date datetime

我使用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“。

如何纠正此逻辑错误?

3 个答案:

答案 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 );