2013-06-02 12 views
10

मैं 'सामाजिक' दिनांक प्रारूप कहने की कोशिश कर रहा हूं। मेरे पास पहले से ही एक समाधान है, लेकिन ऐसा लगता है कि एक बेहतर व्यक्ति मौजूद होना चाहिए। मैं क्यों सामाजिक और क्या मतलब है:'सामाजिक' प्रारूप में स्ट्रिंग करने की तिथि

अगर हम पदों हम अगले विकल्पों के बीच भेद कर सकते हैं की फेसबुक समय टिकटों पर गौर:

  1. एक्स सेकंड पहले
  2. एक्स मिनट पहले
  3. एक्स घंटे पहले 21:36
  4. पर 11:07
  5. शुक्रवार
  6. कल मई 5 5:00 बजे
  7. पर enter image description here
    उदाहरण के लिए::
    तो वर्तमान समय है: 10
  8. 20 नवंबर पसंद करें 9:05 बजे, 2012

मैं बेहतर विवरण के लिए अगले दृश्य समय बनाया 5:33 बजे, 20 सेकंड बुधवार
सामाजिक पोस्ट के बीच हुआ: 00:00 तक बजे मंगलवार < ->5:33 बजे, 20 सेकंड मंगलवार,
तो दिनांक स्वरूप की तरह होना चाहिए : कल 11:07 बजे पर।

समाधान मैं है:
मैं प्रत्येक विकल्प की जाँच (गिनती में 7) और वापसी 'सामाजिक' दिनांक स्ट्रिंग।

// check yesterday 
Date startYesterdayDate = getZeroDayBeforeDays(nowDate, 1); 
int compare = compare(startYesterdayDate, postDate); 

// if postDate comes after startYesterdayDate 
if (compare == -1) 
{ 
    return "Yesterday at " + getString(postDate, "HH:mma"); 
} 

मैं एक ही तरीके से अन्य विकल्पों की जाँच करें: यह कैसे मैं विकल्प 4 के लिए जाँच है

Date postDate = getPostDate(); 
Date nowDate = getNowDate(); 

// check passed seconds 
int passedSeconds = getPassedSeconds(postDate, nowDate); 
if (passedSeconds < 60) 
{ 
    return passedSeconds + " seconds ago"; 
} 

:

यह वह जगह है मैं कैसे विकल्प 1 लिए जाँच करें।


कुछ तरीकों मैं में उपयोग अपने अगर ऊपर बयान:

public static String getString(Date date, String format) 
{ 
    Format formatter = new SimpleDateFormat(format, Locale.US); 
    String s = formatter.format(date); 
    return s; 
} 

/** 
* For example: today - 1 day 
* 
* @param date 
* @param numOfMinusDays 
* @return 
*/ 
public static Date getDateMinusDays(Date date, int numOfMinusDays) 
{ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 
    calendar.add(Calendar.DAY_OF_MONTH, (0 - numOfMinusDays)); 
    return calendar.getTime(); 
} 

/** 
* Get the day before today at 00:00 am.<br> 
* Means, if passed day = <b>Nov 5 13:04</b>, then returned date will be = <b>Nov 4 00:00</b> for days = 1 
* 
* @param date 
* @param days Numner of days to reduce 
* @return 
*/ 
public static Date getZeroDayBeforeDays(Date date, int days) 
{ 
    Calendar yesterday = Calendar.getInstance(); 
    yesterday.setTime(getDateMinusDays(date, days)); 
    yesterday.set(Calendar.HOUR_OF_DAY, 0); 
    yesterday.set(Calendar.MINUTE, 0); 
    yesterday.set(Calendar.SECOND, 0); 
    yesterday.set(Calendar.MILLISECOND, 1); 
    return yesterday.getTime(); 
} 


अंत में, मेरे सवालों का:

  1. वहाँ दोनों के बीच अंतर को परिवर्तित करने का एक बेहतर तरीका है 'सामाजिक' स्ट्रिंग प्रारूप की तिथियां? जैसा कि मैंने कहा, मुझे लगता है कि DateFormat ऑब्जेक्ट को विस्तारित करने जैसे किसी अन्य तरीके का उपयोग किया जा सकता है, लेकिन मुझे यकीन नहीं है।

  2. कैसे 'पर' 'बीता कल' और तरह तार स्थानीय बनाना, ऐसा है कि विभिन्न Local सेट उपयुक्त भाषा को तार बदल जाएगा?


इतने लंबे प्रश्न के लिए खेद है, लेकिन मैं जरूरत समझाने के लिए छोटे रास्ते नहीं पा सके।
धन्यवाद

उत्तर

3

वहां पहले से ही उस के लिए एक कार्यान्वित पुस्तकालय, अगर आप पहिया आविष्कार

PrettyTime देखें फिर से नहीं करना चाहती है स्थानीयकरण समर्थन

PrettyTime p = new PrettyTime(); 
System.out.println(p.format(new Date())); 
//prints: “right now” 

System.out.println(p.format(new Date(1000*60*10))); 
//prints: “10 minutes from now” 
+0

यह बहुत दिलचस्प .., ऐसा लगता है जैसे के साथ मैंने क्या देखा मैं इस पुस्तकालय की जांच करूंगा। धन्यवाद! – sromku

+0

आपका स्वागत है –

संबंधित मुद्दे