Java:将string转换为TimeStamp

我有一个问题,当我尝试将一个string转换为TimeStamp。 我有一个数组,其格式为yyyy-MM-dd ,我想以yyyy-MM-dd HH:mm:ss.SSS的格式进行更改。 所以,我使用这个代码:

 final String OLD_FORMAT = "yyyy-MM-dd"; final String NEW_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; String oldDateString = createdArray[k]; String newDateString; DateFormat formatter = new SimpleDateFormat(OLD_FORMAT); Date d = formatter.parse(oldDateString); ((SimpleDateFormat) formatter).applyPattern(NEW_FORMAT); newDateString = formatter.format(d); System.out.println(newDateString); Timestamp ts = Timestamp.valueOf(newDateString); System.out.println(ts); 

我得到以下结果。

2009-10-20 00:00:00.000

2009-10-20 00:00:00.0

但是当我试图简单地做

 String text = "2011-10-02 18:48:05.123"; ts = Timestamp.valueOf(text); System.out.println(ts); 

我得到正确的结果:

2011-10-02 18:48:05.123

你知道我可能做错了吗? 谢谢您的帮助。

按照以下步骤获取正确的结果:

 try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); Date parsedDate = dateFormat.parse(yourString); Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); } catch(Exception e) { //this generic but you can control another types of exception // look the origin of excption } 

请注意.parse(String)可能会抛出一个ParseException

 import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Util{ public static Timestamp convertStringToTimestamp(String str_date) { try { DateFormat formatter; formatter = new SimpleDateFormat("dd/MM/yyyy"); // you can change format of date Date date = formatter.parse(str_date); java.sql.Timestamp timeStampDate = new Timestamp(date.getTime()); return timeStampDate; } catch (ParseException e) { System.out.println("Exception :" + e); return null; } } } 

首先将datestring转换为date然后使用下面的一行将其转换为timestamp

 Date date=new Date(); Timestamp timestamp = new Timestamp(date.getTime());//instead of date put your converted date Timestamp myTimeStamp= timestamp; 

我相信解决scheme是你的oldDateString就像“2009-10-20”。 显然这不包含比天less的任何时间数据。 如果你格式化这个string与你的新格式化程序应该从哪里得到分钟,秒和毫秒?

所以结果是绝对正确的:2009-10-20 00:00:00.000

你需要解决的是在第一次格式化之前的原始时间戳(包括时间数据)。

 DateFormat formatter; formatter = new SimpleDateFormat("dd/MM/yyyy"); Date date = (Date) formatter.parse(str_date); java.sql.Timestamp timeStampDate = new Timestamp(date.getTime()); 

我想提出现代的答案。 在2013年提出这个问题时,使用Timestamp类是正确的,例如将date时间存储到数据库中。 今天,class级已经过时了。 现在的Javadate和时间API是在三年半之前的2014年春季用Java 8发布的。 我build议你改用这个。

根据您的具体情况确切的要求, Timestamp有两个自然的替代:

  • Instant是时间线上的一个点。 对于大多数目的,我会认为这是最安全的。 Instant与时区无关,即使在客户端设备和数据库服务器运行不同时区的情况下,通常也能正常工作。
  • LocalDateTime是没有时区的date和时间,如2011-10-02 18:48:05.123(引用问题)。

现代JDBC驱动程序(JDBC 4.2或更高版本)以及其他用于数据库访问的现代工具将很乐意将InstantLocalDateTime存储到数据库timestamp数据库列中。 我在这个答案中使用的两个类和其他date – 时间类都属于现在称为java.time或JSR-310的API。

将string转换为LocalDateTime最简单,所以我们先来看看:

  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS"); String text = "2011-10-02 18:48:05.123"; LocalDateTime dateTime = LocalDateTime.parse(text, formatter); System.out.println(dateTime); 

这打印

 2011-10-02T18:48:05.123 

如果您的string是yyyy-MM-dd格式,请改为:

  String text = "2009-10-20"; LocalDateTime dateTime = LocalDate.parse(text).atStartOfDay(); System.out.println(dateTime); 

这打印

 2009-10-20T00:00 

或者更好的是,从LocalDate.parse()获取输出并将其存储到数据typesdate的数据库列中。

在这两种情况下,从LocalDateTime转换为Instant是:

  Instant ts = dateTime.atZone(ZoneId.systemDefault()).toInstant(); System.out.println(ts); 

我已经使用JVM的默认时区指定了一个转换,因为这是过时的类将使用的。 不过,这很脆弱,因为时区设置可能会在您的程序的其他部分或其他运行在同一个JVM中的程序的基础上发生变化。 如果可以,请指定区域/城市格式的时区,例如:

  Instant ts = dateTime.atZone(ZoneId.of("Europe/Athens")).toInstant(); 

你可以尝试一次吗?

 String dob="your date String"; String dobis=null; final DateFormat df = new SimpleDateFormat("yyyy-MMM-dd"); final Calendar c = Calendar.getInstance(); try { if(dob!=null && !dob.isEmpty() && dob != "") { c.setTime(df.parse(dob)); int month=c.get(Calendar.MONTH); month=month+1; dobis=c.get(Calendar.YEAR)+"-"+month+"-"+c.get(Calendar.DAY_OF_MONTH); } } 
 DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date date = formatter.parse(dateString); Timestamp timestamp = new Timestamp(date.getTime()); System.out.println(timestamp);