Transformar Segundos em Data e hora

7 respostas
S

Pessoal, preciso converter em uma data e hora um valor que possuo em segundos desde de 1970.
Por exemplo sei que [telefone removido] representa algo aproximado de 28/11/2008 12:15:03.
Possuo uma rotina em Delphi, onde acho a quantidade de dias, e utilizo uma função nativa do delphi DecodeDate, e encontro a data e a hora.

Alguem pode me ajudar ou me informar como realizar essa conversão em Java.

7 Respostas

Lavieri
package com.superlocar.model;


import java.util.Calendar;
import java.util.Date;

public class Temp {
	public static void main(String[] args) {
		long milisec  = 1227885063L*1000; //seu tempo em segundos x 1000 para milisecs
		System.out.println(new Date(get1970() + milisec));
		
	}
	
	/**
	 * Retorna 1970 em milisegundos
	 * @return
	 */
	public static long get1970() {
		Calendar ano1970 = Calendar.getInstance();
		ano1970.set(Calendar.YEAR, 1970);
		ano1970.set(Calendar.MONTH, 0);
		ano1970.set(Calendar.DAY_OF_MONTH, 1);
		ano1970.set(Calendar.HOUR_OF_DAY, 0);
		ano1970.set(Calendar.MINUTE, 0);
		ano1970.set(Calendar.SECOND, 0);
		ano1970.set(Calendar.MILLISECOND, 0);
		return ano1970.getTimeInMillis();
	}
	
}

saida do console foi

Fri Nov 28 15:11:03 GMT-03:00 2008

Lavieri
refatorando o ultimo código
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Temp {
	public static void main(String[] args) {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
		System.out.println(df.format(getDate(1227885063L)));
		//saido do console = 28/11/2008 03:11:03
	}
	
	/**
	 * Retorna 1970 em milisegundos
	 * @return
	 */
	public static long get1970() {
		Calendar ano1970 = Calendar.getInstance();
		ano1970.set(Calendar.YEAR, 1970);
		ano1970.set(Calendar.MONTH, 0);
		ano1970.set(Calendar.DAY_OF_MONTH, 1);
		ano1970.set(Calendar.HOUR_OF_DAY, 0);
		ano1970.set(Calendar.MINUTE, 0);
		ano1970.set(Calendar.SECOND, 0);
		ano1970.set(Calendar.MILLISECOND, 0);
		return ano1970.getTimeInMillis();
	}
	/**
	 * Retorna uma data a partir dos segundos decorridos apos 1970
	 * @param timeInSecs tempo decorrido apos 1970
	 * @return
	 */
	public static Date getDate(long timeInSecs) {
		long milisec = 1227885063L*1000; //seu tempo em segundos x 1000 para milisecs
		return new Date(milisec + get1970()); // milisec + milisec1970
	}
	
}
A
Date myDate = new Date(segundos * 1000);

A classe Date conta em milisegundos desde 1970

Lavieri

Conhecimento é tudo O.o

A

Fique atento com o TimeZone!

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		df.getCalendar().setTimeZone(TimeZone.getTimeZone("GMT-3"));
		System.out.println(df.format(new Date(1227885063L * 1000)));
maquiavelbona

Conhecimento é tudo O.o
Só complementando, são os mili-segundos configurados na bios/relógio do SO. A conta que vem desde 01/01/1970 00:00 UTC é o padrão UNIX, o que nos lembra que ninguém gosta de seguir padrões. Um dia você vai estar testando Smalltalk e vai ficar espantado com a diferença entre as contagens do Java e Smalltalk ( que começa a contar de 01/01/1901 ).

Isso é o inferno em C, pois depedendo do compilador/plataforma em que você trabalha é um formato diferente. Mais em:

Até!

S

Pessoal muito obrigado !!!

Criado 27 de janeiro de 2009
Ultima resposta 27 de jan. de 2009
Respostas 7
Participantes 4