2014-02-13 50 views
0

我得到一個字符串「Date.UTC(2013,10,9,0,0,0)」 from函數返回。我想建立一個約會。像「2013-10-09 00:00:00」Java Reflection - 調用日期函數

我可以使用反射給我一個字符串的時間戳嗎? 或者我必須使用一個子字符串和基於「,」拆分並構造日期字符串?

+1

如果你覺得反射會來這裏發揮作用?解析字符串是完成此操作的適當方法。 –

+0

只需使用解析器,我同意Sotirios,不需要反思。 –

回答

2

使用SimpleDateFormat帶有花紋適合您的輸入格式:

Date date = new SimpleDateFormat("'Date.UTC('yyyy,MM,dd,HH,mm,ss)").parse(str); 

下面是一些測試代碼:

String str = "Date.UTC(2013,10,9,0,0,0)"; 
Date date = new SimpleDateFormat("'Date.UTC('yyyy,MM,dd,HH,mm,ss)").parse(str); 
System.out.println(date); 

輸出:

Wed Oct 09 00:00:00 EST 2013 

注意Date對象攜帶不格式化信息。如果您想以特定格式打印Date,請爲此創建一個DateFormat

+0

偉大的這個作品。你能解釋爲什麼在Date.UTC前面有單引號('),然後再在YYYY前面? – Harpreet

+1

@Harpreet在單引號內圍繞字符字符進行轉義。從技術上講,你只需要轉義那些具有特殊格式含義的字符(例如't'是格式化字符)。而不用擔心'Date.UTC('是特殊的,哪些字符包裹了整個前導字面值,即'Date.UTC(''。 – Bohemian

0

不需要,不需要反射和字符串分割。讓日期時間格式化程序爲您完成解析工作。

answer by Bohemian在技術上是正確的。但不可取。捆綁的java.util.Date和Calendar非常麻煩,應該避免。使用Joda-TimeJava 8中的新。

示例代碼

String input = "Date.UTC(2013,10,9,0,0,0)"; 

DateTimeFormatter formatter = DateTimeFormat.forPattern("'Date.UTC('yyyy,MM,dd,HH,mm,ss)").withZone(DateTimeZone.UTC); 
DateTime dateTime = formatter.parseDateTime(input); 

System.out.println("dateTime: " + dateTime); 
System.out.println("dateTime in India: " + dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"))); 

當運行...

dateTime: 2013-10-09T00:00:00.000Z 
dateTime in India: 2013-10-09T05:30:00.000+05:30