我们可以改变spring在SimpleDateFormat中提供的默认时间吗?


this.mdbReading.y = new Date[reading.y.length];
SimpleDateFormat ydateFormat = new SimpleDateFormat("yyyy-MM-dd");

for ( i = 0; i < reading.y.length; i++) {    
//System.out.println("i = " + i + " string is "+ reading.y[i]);                                   
try {

this.mdbReading.y[i] = ydateFormat.parse(reading.y[i]);
} catch (Exception e) {
//TODO: handle exception
System.out.println("Exception in date parse "+ e);
break;
}
}

这是我的代码,其中输入字符串即reading.y[i]是这种格式"2016-04-28"..我得到的输出是"2016-04-24 T18.30:00 00:00:00"而我期望的输出是&;2016-04-24 T00.000:00 00:00:00&;..有没有办法将默认时间设置为00:00?

java.time

java.utilDate-Time API及其格式化APISimpleDateFormat过时且容易出错。建议完全停止使用它们,切换到现代的Date-Time API*

使用java.time的解决方案,现代日期-时间API:

import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) throws ParseException {
LocalDate date = LocalDate.parse("2016-04-28");
System.out.println(date);
// In case you also need time-part as 00:00
LocalDateTime ldt = date.atTime(LocalTime.MIN);
System.out.println(ldt);
}
}

输出:

2016-04-28
2016-04-28T00:00

现代Date-Time API基于ISO 8601,只要Date-Time字符串符合ISO 8601标准,就不需要显式地使用DateTimeFormatter对象。您的日期字符串已经是ISO 8601格式。

Trail: Date Time了解更多关于现代Date-Time API的信息. 检查这个答案和这个答案,了解如何使用java.timeAPI与JDBC。

你的代码出了什么问题?默认情况下,SimpleDateFormat在解析任何字符串时使用默认时区。下面是重现错误的代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.parse("2016-04-28").toInstant());
}
}

输出:

2016-04-27T18:30:00Z

为了保持时间部分00:00:00,需要将UTC时区设置为SimpleDateFormat实例。

演示:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.parse("2016-04-28").toInstant());
}
}

输出:

2016-04-28T00:00:00Z

*如果你正在为一个Android项目工作,你的Android API级别仍然不兼容Java-8,检查Java 8+可用的API。注意Android 8.0 Oreo已经提供了对java.time的支持。

相关内容

  • 没有找到相关文章

最新更新