【发布时间】:2018-05-11 07:20:40
【问题描述】:
我正在尝试将毫秒 (20180510-10:50:58.106) 的字符串转换为 java 中的日期。但是,当我转换它时,我得到毫秒部分,但又在字符串中。我想要日期格式的相同部分。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class SimpleDateFormatExample {
public static void main(String[] args) {
String curDate = "20180510-10:50:58.106";
Date SysDateVar = null ;
//SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS");
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS");
//String Todate = format.format(curDate);
//System.out.println("format.parse(curDate)="+Todate);
String abc = null;
try
{
abc = format.format(format.parse(curDate));
System.out.println("SysDateVar ="+abc);
SysDateVar = new Date ((long) (format.parse(curDate)).getTime());
System.out.println("format.parse(curDate)="+ SysDateVar);
}
catch (ParseException e) {
e.printStackTrace();
}
}
}
输出是:
$javac SimpleDateFormatExample.java
$java -Xmx128M -Xms16M SimpleDateFormatExample
SysDateVar =20180510-10:50:58.106
format.parse(curDate)=Thu May 10 10:50:58 UTC 2018
变量 abc 是一个字符串。我希望在 Date 变量中具有相同的输出。
【问题讨论】:
-
因为默认格式(
Date.toString)不打印毫秒。只需使用format.format(SysDateVar)即可使用您定义的格式化程序来获取字符串或定义另一个字符串。 PS:为什么要从Date.getTime()检索SimpleDateFormatter创建Date?SysDateVar = new Date ((long) (format.parse(curDate)).getTime());->SysDateVar = format.parse(curDate); -
您似乎误以为任何日期/时间类都包含某种格式信息,但事实并非如此。它们只是某个时间点的简单表示
-
嗨,Alex,当我尝试这样做时,我的毫秒部分被截断了。日期 SysDateVar = null ; SimpleDateFormat 格式 = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS"); SysDateVar = new Date ((long) (format.parse(curDate)).getTime());
-
no @chetan,它不会被截断,但您只能通过检查它的默认字符串表示来检查
date实例,您打印的内容不能反映Date,主要是因为Date实例没有格式。您看到的是Date.toString方法以String形式表示实例的结果(如答案中所述)。 -
我建议你避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。如果毫秒不为零,java.time的类也将通过他们的toString方法打印毫秒(或更小)。
标签: java date milliseconds string-to-datetime