【问题标题】:Java URL encoding of a date (ZULU format) [duplicate]日期的Java URL编码(ZULU格式)[重复]
【发布时间】:2019-02-11 23:52:20
【问题描述】:

假设我有一个网址:

https://example/dateParam/

我有一个用户输入的日期值(ZULU 格式),例如:

2016-07-20 13:10:04 +0300.

我希望结果是正确编码的 URL:

https://example/dateParam/2016-07-20%2013%3A10%3A04%20%2B0300

当我尝试这样做时:

String dateParam = "2016-07-20 13:10:04 +0300";
String encodedParam = URLEncoder.encode(dateParam, "UTF-8");
System.out.println(encodedParam);

我得到以下结果:

2016-07-20+13%3A10%3A04+%2B0300

对于空格,我需要 %20 而不是 +。 实现这一目标的最佳方法是什么?我尝试了 URLEncoder 并创建了 URI/URL 对象,但没有一个是完全正确的。

【问题讨论】:

  • 你的结果怎么不太对?因为“+”没有被编码?
  • 顺便说一句,我不认为有祖鲁格式这样的东西,至少我没有听说过。有一个“祖鲁时区”,偏移量为 +00:00(与您的 +03:00 不同)。

标签: java encoding timestamp format


【解决方案1】:

我建议简化问题,使用像20180906T223329Z 这样的标准格式。

将您的输入字符串解析为OffsetDateTime。搜索 Stack Overflow,因为这已经被介绍过很多次了。

offset-from-UTC 调整为零,调整为UTC 本身。

OffsetDateTime odtUtc = odt.withOffsetSameInstant( ZoneOffSet.UTC ) ; 

然后以标准ISO 8601 格式创建文本。这些格式的“基本”版本最大限度地减少了分隔符的使用。 T 将年-月-日与小时-分钟-秒分开。末尾的Z 表示UTC,发音为“Zulu”。示例:

20180906T223329Z

使用DateTimeFormatter 类生成字符串。

DateTimeFormatter f = DateTimeFormatterofPattern( "uuuuMMdd'T'HHmmssX" ) ;
String output = odtUtc.format( f ) ;

最后,通过您的 URL 编码器运行该输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多