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);