Sto cercando di ottenere il formato di data "social". Ho già una soluzione, ma sembra che dovrebbe esistere una migliore. Perché sociali e quello che intendo:Data da inserire nel formato "social"
Se guardiamo Facebook timestamp dei posti possiamo distinguere tra opzioni successive:
- X secondi fa
- X minuti fa
- X ore fa
- Ieri alle 11:07
- Venerdì alle 21:36
- 5 maggio alle 5:00 pm
- 20 novembre alle 09:05 2012
ho fatto prossimo cronologia visiva per una migliore spiegazione:
Per esempio:
Se l'ora corrente è: 17:33, 20 sec Mercoledì
il post sociale è successo tra: 12:00 Martedì < ->17:33, 20 sec Martedì,
quindi il formato della data deve essere come : Ieri alle 11:07 am.
soluzione che ho:
posso controllare ogni opzione (7 nel conteggio) e tornare stringa di data 'sociale'.
Questo è come mi assegno per opzione 1:
Date postDate = getPostDate();
Date nowDate = getNowDate();
// check passed seconds
int passedSeconds = getPassedSeconds(postDate, nowDate);
if (passedSeconds < 60)
{
return passedSeconds + " seconds ago";
}
Questo è come mi assegno per opzione 4:
// 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");
}
verifico altre opzioni nella stessa maniera.
Alcuni metodi che uso nel mio caso dichiarazioni di cui sopra:
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();
}
Infine, Le mie domande:
Esiste un modo migliore di convertire la differenza tra due Date al formato di stringa "social"? Come ho detto, sento che potrebbe essere usato un altro modo, ad esempio l'estensione dell'oggetto
DateFormat
, ma non ne sono sicuro.Come localizzare le stringhe come 'Yesterday' e 'a', in modo tale che diversi
Local
set cambierà le stringhe al linguaggio adatto?
Scusate per un lungo domanda così, ma non riuscivo a trovare modo più breve per spiegare la necessità.
Grazie
Molto interessante .., sembra come se fosse quello che ho cercato Controllerò questa libreria Grazie! – sromku
siete i benvenuti –