【问题标题】:How to format date for use in a URL as a parameter如何格式化日期以在 URL 中用作参数
【发布时间】:2014-04-11 14:43:58
【问题描述】:

我正在使用 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”作为inputtimedate1 是“Sun Dec 29 00:00:00 PKT 2013”​​,c1.getTime() 返回“Mon Dec 30 00:00:00根据上述代码块,PKT 2013" 和 inputtime 变为 "2014-12-364T00:12:00"。

如何纠正这种逻辑错误?

【问题讨论】:

    标签: java date datetime


    【解决方案1】:

    您应该考虑 SimpleDateFormat 日期和时间模式:link

    例如,像这样的:

    formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    

    【讨论】:

      【解决方案2】:

      尝试更改您的日期模式

      new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS");
      

      new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
      
      字母日期或时间组件演示示例 y 年 1996 年; 96 M 年 月 月 7 月;七月; 07 D 一年中的第 189 天 d 月份中的第 10 天 小时(上午/下午) (1-12) 第 12 号 m 小时中的分钟数 30 s 分秒数 55 S 毫秒数 978

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2022-12-18
          • 2020-09-05
          • 1970-01-01
          • 2018-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多