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.util
Date-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.time
API与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
的支持。