2014-11-20 35 views
0

我想從給定的輸入字符串中找出具體的日期,例如「201411W3」。我知道這個星期是來自這個字符串(W3)的第3個星期,這個活動將在星期五舉行,所以我想找到第3個星期五的日期。我做了這樣的事情:從輸入字符串中找出日期

public static Date getLastFriday(int month, int year) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(year, month, 1); 
    cal.add(Calendar.DAY_OF_MONTH, - (cal.get(Calendar.DAY_OF_WEEK) % 7 + 8)); 
    return cal.getTime(); 
} 

當我把這個方法:getLastFriday(11,2014),我得到的值「週五11月21日13點16分57秒EST 2014」,我需要解析,找出日期。有沒有辦法從結果中獲得日期?

謝謝!

+0

你究竟需要什麼?日期對象在時間字段中有零嗎?或者簡單地說「11月21日星期五」的字符串。順便說一句,我認爲你的方法是不正確的(嘗試2014年1月,其中有5個星期五,它給第四)。 – RealSkeptic 2014-11-20 19:00:29

回答

1

如果我理解你,那麼你可以使用以下代碼作爲參考 -

import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class Test{ 

    public static void main (String[] args) 
    { 
     String str="201411W3"; 
     String[] strSplitted = str.split("W"); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.MONTH, Integer.parseInt(strSplitted[0].substring(4,6))-1); 
     calendar.set(Calendar.YEAR, Integer.parseInt(strSplitted[0].substring(0,4))); 
     calendar.set(Calendar.DAY_OF_MONTH, 1); 

     if(calendar.get(Calendar.DAY_OF_WEEK)==7) 
     { 
      calendar.set(Calendar.WEEK_OF_MONTH, Integer.parseInt(strSplitted[1])+1); 
     } 
     else 
     { 
      calendar.set(Calendar.WEEK_OF_MONTH, Integer.parseInt(strSplitted[1])); 
     } 

     calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
     String formattedDate = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); 

     System.out.println(formattedDate); 
    } 
} 

Output : 2014-11-21您可以將格式更改爲任何您想要的格式。

+0

它的工作,謝謝! – user1318369 2014-11-28 23:30:22

0

如果您只想在沒有秒的情況下得到月份和日期,可以撥打.get(Calendar.MONTH).get(Calendar.DATE)並將它們傳遞給新的日期對象的構造函數並返回該對象。

更多信息:here

0

使用this的SimpleDateFormat

我沒有測試下面的代碼,但它會像:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
Date myDate = sdf.parse("Fri Nov 21 13:16:57 EST 2014");