Java 如何设置日期格式以在URL中用作参数
我正在使用一个API来获取Java中某个特定日期之前的天气预报 将日期作为URL参数传递的要求是它必须是“YYYY-MM-DD'T'HH:MM:SS”格式。我从用户那里获取这种格式的输入,然后获取当前系统日期,然后循环直到所需的日期。问题在于将输入的日期字符串转换为日期格式,将其递增一天,然后将其转换回URL参数的字符串格式 我正在使用以下代码来执行此操作,但它给出的结果不正确:Java 如何设置日期格式以在URL中用作参数,java,date,datetime,Java,Date,Datetime,我正在使用一个API来获取Java中某个特定日期之前的天气预报 将日期作为URL参数传递的要求是它必须是“YYYY-MM-DD'T'HH:MM:SS”格式。我从用户那里获取这种格式的输入,然后获取当前系统日期,然后循环直到所需的日期。问题在于将输入的日期字符串转换为日期格式,将其递增一天,然后将其转换回URL参数的字符串格式 我正在使用以下代码来执行此操作,但它给出的结果不正确: formatter = new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS");
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 PKT 2013”,根据上述代码块inputtime
变为“2014-12-364T00:12:00”
<如何纠正这个逻辑错误?< P>你应该考虑SimuleDATA格式的日期和时间模式: 例如,类似这样的内容:
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
试着改变你的约会模式
new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS");
到
信函日期或时间组件演示示例
y年1996年;96
年7月的M个月;7月;07
第189年的D日
d第10个月的第几天
小时,上午/下午(1-12)12号
米小时数30分钟
第55分钟第二秒
S毫秒数978
与java捆绑在一起的java.util.Date和.Calendar类是出了名的麻烦。避开它们 该格式由ISO 8601标准定义。Joda时间库遵循该标准的格式作为解析和生成字符串的默认格式。Java8中的新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 );
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
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 );