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或更高版本)以及其他用于数据库访问的现代工具将很乐意将Instant或LocalDateTime存储到数据库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);