第一种方式:
看TimeStamp类的源码:
1 public Timestamp(long time) { 2 super((time/1000)*1000); 3 nanos = (int)((time%1000) * 1000000); 4 if (nanos < 0) { 5 nanos = 1000000000 + nanos; 6 super.setTime(((time/1000)-1)*1000); 7 } 8 }
可以看出要传入一个时间戳,就可以构造。
写了一个静态的方法:
1 public static Timestamp getAppointTimestamp1(String time){ 2 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3 Timestamp timestamp = null; 4 try { 5 Date date = simpleDateFormat.parse(time); 6 timestamp = new Timestamp(date.getTime()); //date.getTime() 就是时间戳 7 } catch (ParseException e) { 8 e.printStackTrace(); 9 } 10 return timestamp; 11 }
第二种方式:
TimeStamp类的源码:
1 public static Timestamp valueOf(String s) { 2 final int YEAR_LENGTH = 4; 3 final int MONTH_LENGTH = 2; 4 final int DAY_LENGTH = 2; 5 final int MAX_MONTH = 12; 6 final int MAX_DAY = 31; 7 String date_s; 8 String time_s; 9 String nanos_s; 10 int year = 0; 11 int month = 0; 12 int day = 0; 13 int hour; 14 int minute; 15 int second; 16 int a_nanos = 0; 17 int firstDash; 18 int secondDash; 19 int dividingSpace; 20 int firstColon = 0; 21 int secondColon = 0; 22 int period = 0; 23 String formatError = "Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]"; 24 String zeros = "000000000"; 25 String delimiterDate = "-"; 26 String delimiterTime = ":"; 27 28 if (s == null) throw new java.lang.IllegalArgumentException("null string"); 29 30 // Split the string into date and time components 31 s = s.trim(); 32 dividingSpace = s.indexOf(' '); 33 if (dividingSpace > 0) { 34 date_s = s.substring(0,dividingSpace); 35 time_s = s.substring(dividingSpace+1); 36 } else { 37 throw new java.lang.IllegalArgumentException(formatError); 38 } 39 40 // Parse the date 41 firstDash = date_s.indexOf('-'); 42 secondDash = date_s.indexOf('-', firstDash+1); 43 44 // Parse the time 45 if (time_s == null) 46 throw new java.lang.IllegalArgumentException(formatError); 47 firstColon = time_s.indexOf(':'); 48 secondColon = time_s.indexOf(':', firstColon+1); 49 period = time_s.indexOf('.', secondColon+1); 50 51 // Convert the date 52 boolean parsedDate = false; 53 if ((firstDash > 0) && (secondDash > 0) && (secondDash < date_s.length() - 1)) { 54 String yyyy = date_s.substring(0, firstDash); 55 String mm = date_s.substring(firstDash + 1, secondDash); 56 String dd = date_s.substring(secondDash + 1); 57 if (yyyy.length() == YEAR_LENGTH && 58 (mm.length() >= 1 && mm.length() <= MONTH_LENGTH) && 59 (dd.length() >= 1 && dd.length() <= DAY_LENGTH)) { 60 year = Integer.parseInt(yyyy); 61 month = Integer.parseInt(mm); 62 day = Integer.parseInt(dd); 63 64 if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) { 65 parsedDate = true; 66 } 67 } 68 } 69 if (! parsedDate) { 70 throw new java.lang.IllegalArgumentException(formatError); 71 } 72 73 // Convert the time; default missing nanos 74 if ((firstColon > 0) & (secondColon > 0) & 75 (secondColon < time_s.length()-1)) { 76 hour = Integer.parseInt(time_s.substring(0, firstColon)); 77 minute = 78 Integer.parseInt(time_s.substring(firstColon+1, secondColon)); 79 if ((period > 0) & (period < time_s.length()-1)) { 80 second = 81 Integer.parseInt(time_s.substring(secondColon+1, period)); 82 nanos_s = time_s.substring(period+1); 83 if (nanos_s.length() > 9) 84 throw new java.lang.IllegalArgumentException(formatError); 85 if (!Character.isDigit(nanos_s.charAt(0))) 86 throw new java.lang.IllegalArgumentException(formatError); 87 nanos_s = nanos_s + zeros.substring(0,9-nanos_s.length()); 88 a_nanos = Integer.parseInt(nanos_s); 89 } else if (period > 0) { 90 throw new java.lang.IllegalArgumentException(formatError); 91 } else { 92 second = Integer.parseInt(time_s.substring(secondColon+1)); 93 } 94 } else { 95 throw new java.lang.IllegalArgumentException(formatError); 96 } 97 98 return new Timestamp(year - 1900, month - 1, day, hour, minute, second, a_nanos); 99 }
通过TimeStamp类的valueof(String time)静态方法直接传入字符串参数就可以了。
写了一个静态的方法:
1 public static Timestamp getAppointTimestamp2(String time){ 2 Timestamp timestamp = Timestamp.valueOf(time); 3 return timestamp; 4 }