欣赏有很多相似的帖子,但我无法找到特定的帖子来帮助。
我试图将此字符串转换为Java中的日期
2017-05-16 06:24:36-0700
但每次使用此代码都失败
Date Login = new SimpleDateFormat("dd/MM/yy HH:mm:ss").parse("2017-05-16 06:24:36-0700");
现在我假设它由于最后的时区信息 - 我无法弄清楚如何设置格式。我试过这个但没有运气
SimpleDateFormat("dd/MM/yy HH:mm:ssZ")
有什么想法吗?
答案 0 :(得分:7)
传递给 function UploadFile(file) {
// following line is not necessary: prevents running on SitePoint servers
if (location.host.indexOf("sitepointstatic") >= 0) return
var xhr = new XMLHttpRequest();
if (xhr.upload && file.type == "image/jpeg" && file.size <= $id("MAX_FILE_SIZE").value) {
// create progress bar
var o = $id("progress");
var progress = o.appendChild(document.createElement("p"));
progress.appendChild(document.createTextNode("upload " + file.name));
// progress bar
xhr.upload.addEventListener("progress", function(e) {
var pc = parseInt(100 - (e.loaded / e.total * 100));
progress.style.backgroundPosition = pc + "% 0";
}, false);
// file received/failed
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
progress.className = (xhr.status == 200 ? "success" : "failure");
}
};
// start upload
xhr.open("POST", $id("upload").action, true);
xhr.setRequestHeader("X_FILENAME", file.name);
xhr.send(file);//This is line 116
}
}
的日期格式为SimpleDateFormat
,而您尝试解析的日期格式为"dd/MM/yy"
。试试这个:
"yyyy-MM-dd"
作为旁注,根据您使用的Java版本,我建议使用新的java.time
软件包(JDK 1.8+)或该软件包的back port(JDK 1.6+)而不是过时的(没有双关语)Date login = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ").parse("2017-05-16 06:24:36-0700");
和/或Date
类。
Calendar
答案 1 :(得分:3)
我已经完全赞同Bryan’s answer因为它包含并推荐了java.time
解决方案。不过,我需要补充一些想法。
您的代码reviloSlater会丢弃时区信息(更准确地说,区域偏移信息),我不确定从一开始就敢做到这一点。对于java.time
类,包含它是更自然的,当我们确定不需要它时,很容易丢弃。
使用offset进行解析:
OffsetDateTime loginOdt = OffsetDateTime.parse("2017-05-16 06:24:36-0700",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ"));
删除时区偏移信息
LocalDateTime loginLdt = loginOdt.toLocalDateTime();
LocalDateTime
是没有任何时区或偏移信息的日期和时间。在这种情况下,我们当然得到
2017-05-16T06:24:36
Bryan的java.time
代码也使用字符串中的时区偏移信息。编辑:在Bryan编辑之后,代码现在可以工作并给我们:
2017-05-16T13:24:36Z
这是相同的时间点(Instant.toString()
以UTC格式打印时间)。另一种方法是,在我们可以做之前使用OffsetDateTime
Instant login = loginOdt.toInstant();
java.time
充满了可能性。