2016-05-05 5 views
0

как преобразовать значение метки времени 444663422.631236 на сегодняшний день. Я пробовал эти способы, но не работал.sqlite конвертировать временную метку на сегодняшний день

public class Teste { 
public static void main(String[] args) throws ParseException { 
    String l = "480364794"; 
    String d = "479617200"; 

    print(convertEpoc("444663422")); 

    print(convert("480364794", "dd/MM/yyyy HH:mm:ss")); 
    print(convert("479617200", "dd/MM/yyyy HH:mm:ss")); 

} 

private static String convertEpoc(String d) { 
    long epoch = Long.parseLong(d); 
    Instant instant = Instant.ofEpochMilli(epoch * 1000); 
    ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); 
    return instant.toString(); 
} 

public static String convert(String epochSec, String dateFormatStr) { 
    Date date = new Date(Long.parseLong(epochSec) * 1000); 
    SimpleDateFormat format = new SimpleDateFormat(dateFormatStr, 
      Locale.getDefault()); 
    return format.format(date); 
} 

public static void print(String s) { 
    System.out.println(s); 
}} 

Что я делаю неправильно?

+0

'конвертировать', кажется, все в порядке, и какую банку вы использовали в' convertEpoc'? – Blank

+0

@ JoséHolandaNeto Что значит «не работает»? Что вы ожидали и что вы получили вместо этого? –

+0

@ JoséHolandaNeto Почему вы приводите один пример ввода в первом предложении, но затем даете совершенно разные входы в вашем примере кода? Пожалуйста, помогите организовать свои мысли перед публикацией. –

ответ

0

Ваш вопрос не соответствует двум различным типам ввода. Сначала мы рассмотрим целые секунды, затем посмотрим на ввод с десятичной дробью.

Целые Секунды

Нет необходимости для умножения на тысячу, когда вход отсчет секунд с epoch reference date. Класс Instant предлагает статический метод ofEpochSecond для обработки целых секунд.

OffsetDateTime

При работе с только offset-from-UTC (или сам UTC), используйте OffsetDateTime класс. Класс ZonedDateTime предназначен для назначения полного часового пояса. Полный часовой пояс - offset-from-UTCплюс набор правил для обработки аномалий, таких как Daylight Saving Time (DST).

Итак, в чем разница между Instant и OffsetDateTime присвоенными UTC как смещение? Нет разницы в значении, оба представляют один и тот же момент. Но у OffsetDateTime есть дополнительные возможности. Одной из таких функций является гибкое форматирование при создании представления String, тогда как Instant не предназначено для форматирования, отличного от собственного метода toString.

String input = "480364794"; 
Instant instant = Instant.ofEpochSecond (Long.parseLong (input)); 
OffsetDateTime odt = OffsetDateTime.ofInstant (instant , ZoneOffset.UTC); 

System.out.println ("input: " + input + " | instant: " + instant + " | odt: " + odt); 

При запуске.

вход: 480364794 | мгновенный: 1985-03-22T18: 39: 54Z | ODT: 1985-03-22T18: 39: 54Z

Фракционных Второй

Для ввода дробной секунды, отделить целое число секунд из фракции. Затем передайте каждый статический заводский метод, Instant.ofEpochSecond, используя два аргумента.

Один из способов получения этих номеров - BigDecimal. Мы не используем double/float, потому что эти типы данных торгуют точностью для скорости выполнения.

См. this Question для обсуждения извлечения фракционной части BigDecimal. Особенно примечательны this Answer и this Answer.

BigDecimal input = new BigDecimal ("444663422.631236"); 

// Seconds 
long seconds = input.longValue(); // = 444,663,422. Truncates the fraction. Only the whole number portion remains. 

// Nanoseconds 
BigDecimal fractionalSecond = input.remainder (BigDecimal.ONE); // = 0.631236. Truncates whole number. Only decimal fraction remains. 
int decimalPlacesForNanoseconds = 9; 
if (fractionalSecond.scale() > decimalPlacesForNanoseconds) { // Too many decimal places? 
    // FIXME: Handle this error condition. This means data loss as our input has a granularity finer than nanoseconds. 
    System.out.println ("ERROR - Input finer than nanoseconds. Message # 0aa71e3b-6a5b-4ac4-b239-68e6b9f12284."); 
} 
BigInteger nanosBI = fractionalSecond.movePointRight (decimalPlacesForNanoseconds).toBigInteger(); // Make a whole number from the fraction. 
long nanos = nanosBI.longValue(); 

// Instant = (Seconds + Nanoseconds) 
Instant instant = Instant.ofEpochSecond (seconds , nanos); 

Дамп для консоли.

System.out.println ("input: " + input + " | seconds: " + seconds + " | nanos: " + nanos + " | instant: " + instant); 

При работе.

вход: 444663422.631236 | секунд: 444663422 | Нано: 631236000 | момент: 1984-02-03T13: 37: 02.631236Z

Смежные вопросы