日期的Java URL编码(ZULU格式)

时间:2018-09-06 16:44:13

标签: java encoding timestamp format

说我有一个网址:

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对象,但没有一个是正确的。

1 个答案:

答案 0 :(得分:0)

我建议使用20180906T223329Z之类的标准格式简化问题。

将您的输入字符串解析为OffsetDateTime。搜索堆栈溢出,因为已经讨论了很多次。

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编码器运行该输出。