2014-09-11 9 views
6

jestem konwersji datę ciąg do Millis jak tenKonwersja czas w milisekundach od epoki do „dd/mm/yy”

import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 


private static final DateTimeZone PST = DateTimeZone.forID("PST8PDT"); 
private static final DateTimeFormatter DATE_FORMATTER = 
    DateTimeFormat.forPattern("yyyy-MM-dd").withZone(PST); 


Long millis = DateTime.parse(startDate, DATE_FORMATTER).withTimeAtStartOfDay().getMillis()); 

gdzie startDate jest data chcę przekonwertować.

W jaki sposób mogę dokonać inżynierii wstecznej, aby uzyskać datę w PST, gdy mam millis?

+3

Powinieneś użyć "America/Los_Angeles" zamiast "PST" lub "PST8PDT", ponieważ Joda-Time zdecydowanie preferuje pierwszy format. Nazwy stref czasowych i ich skróty często nie są unikalne. PST może również oznaczać Pakistan Standard Time, a Joda-Time ma duże problemy z analizowaniem takich skrótów. –

Odpowiedz

2

Jeśli rozumiem Twoje pytanie można użyć DateTimeFormatter.print(long),

DateTimeFormatter shortFormat = 
    DateTimeFormat.forPattern("MM/dd/yy").withZone(PST); 
String formatted = shortFormat.print(millis); 

Od połączonego Javadoc,

Drukuje natychmiast milisekundy na łańcuch.

0

Po prostu należy skonstruować nowy obiekt DateTime.

DateTime newDate = new DateTime(millis); 

Overloaded with timezone

+0

Jak mogę określić strefę czasową z tym? – Shan

+0

Może być przeciążony drugim parametrem, strefa czasowa. Nie jestem pewien, jaka jest właściwa wartość dla PST, ale jestem pewien, że możesz ją znaleźć. Link w poście. – Grice

1

Java 8 rozwiązanie wykorzystujące java.time API, które będą konwertować dany ciąg do milisekundy i milisekundę do tej pory strun rozważają Strefa czasowa:

import java.time.Instant; 
import java.time.LocalDateTime; 
import java.time.ZoneId; 
import java.time.ZonedDateTime; 
import java.time.format.DateTimeFormatter; 


public class SO25788709 { 

    public static void main(String[] args) { 
     String strDate = "2014-09-12 23:59:59"; 
     String pattern = "yyyy-MM-dd HH:mm:ss"; 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); 
     ZoneId zone = ZoneId.of("America/Los_Angeles"); 

     long milli = getMillis(strDate, formatter, zone);      
     System.out.println(milli); 

     String retStrDate = getDateString(milli, formatter, zone); 
     System.out.println(retStrDate); 
    } 

    private static long getMillis(String strDate, DateTimeFormatter formatter, ZoneId zone) { 
     LocalDateTime localDateTime = LocalDateTime.parse(strDate, formatter); 
     ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zone); 
     Instant instant = zonedDateTime.toInstant(); 
     long milli = instant.toEpochMilli(); 
     return milli; 
    } 

    private static String getDateString(long milli, DateTimeFormatter formatter, ZoneId zone) { 
     Instant instant = Instant.ofEpochMilli(milli); 
     ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, zone); 
     String strDate = zonedDateTime.format(formatter); 
     return strDate; 
    } 
} 
2

stworzyłem 2 metody, które jest wystarczająco elastyczne, aby obsłużyć dowolną datę Formatuj w dowolnej strefie czasowej.

Pierwsza metoda jest od daty String do Millis (Epoch)

//dateString to long 
    private static long formatterDateToMillis(String dateString, String format, String timeZone){ 
     //define Timezone, in your case you hardcoded "PST8PDT" for PST 
     DateTimeZone yourTimeZone = DateTimeZone.forID(timeZone); 
     //define your pattern 
     DateTimeFormatter customFormat = DateTimeFormat.forPattern(format).withZone(yourTimeZone); 
     //parse dateString to the format you wanted 
     DateTime dateTime = customFormat.parseDateTime(dateString); 
     //return in Millis, usually in epoch 
     return dateTime.getMillis();  
    } 

Druga metoda jest od Millis to Date String

//dateInMillis to date format yyyy-MM-dd 
    private static String formatterMillistoDate(long dateInMillis, String format, String timeZone){ 
     //define your format 
     DateTimeFormatter customFormat = DateTimeFormat.forPattern(format); 
     //convert to DateTime with your desired TimeZone 
     DateTime dateTime = new DateTime(dateInMillis, DateTimeZone.forID(timeZone)); 
     //return date String in format you defined 
     return customFormat.print(dateTime); 
    } 

Spróbuj wejść na główną metodę swojej():

long valueInMillis = formatterDateToMillis("2015-03-17","yyyy-MM-dd","PST8PDT"); 
    System.out.println(valueInMillis); 

    String formattedInDate = formatterMillistoDate(1426575600000L,"yyyy-MM-dd","PST8PDT"); 
    System.out.println(formattedInDate); 

Powinieneś otrzymać następujące dane wyjściowe:

2015-03-17

Nadzieja to pomaga! ;)