programing

어떻게 자바에서 데이트에는 currentTimeMillis를 변환하는 데?

prostudy 2022. 5. 17. 21:50
반응형

어떻게 자바에서 데이트에는 currentTimeMillis를 변환하는 데?

그래서 저도, 나의 문제는 날짜에 지정된 형식으로 밀리초 단위 변환하는 것입니다는 로그 파일을 생성에서 로케 일을 알아 로그 파일에 밀리초 서버에서 불러 일으켰다.그 로그의 처리 서버의 시간대에 위치한에서 일어나고 있다.반면으로 전환하는데"SimpleDateFormat"프로그램과 포맷했다는으로 시작하는 기계의 데이트 맡고 있는 서버의 정확한 시간을 나타내지 않는다.다른 방법 우아하게 이 문제를 해결할 있나요?

long yourmilliseconds = 1322018752992l;
        //1322018752992-Nov 22, 2011 9:25:52 PM 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS",Locale.US);

GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central"));
calendar.setTimeInMillis(yourmilliseconds);

System.out.println("GregorianCalendar -"+sdf.format(calendar.getTime()));

DateTime jodaTime = new DateTime(yourmilliseconds, 
                    DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central")));
DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss,SSS");

System.out.println("jodaTime "+parser1.print(jodaTime));

출력:

Gregorian Calendar -2011-11-23 08:55:52,992
jodaTime 2011-11-22 21:25:52,992

당신은 사용할 수 당신은을 사용할 수 있있java.util.Date수업한 다음수업한 다음을 사용하 사용하SimpleDateFormat그 포맷에를 포맷하려면Date.

Date date=new Date(millis);

우리는(자습서)-매핑 되지 않은 드라이브 API는 자바 SE8에서 소개했다java.time 패키지를 사용할 수 있다.

var instance = java.time.Instant.ofEpochMilli(millis);
var localDateTime = java.time.LocalDateTime
                        .ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata"));
var zonedDateTime = java.time.ZonedDateTime
                            .ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));

// Format the date

var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O");
var string = zonedDateTime.format(formatter);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);

int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);

한줄 요약

Instant.ofEpochMilli( 1_322_018_752_992L )     // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
       .atZone( ZoneId.of( "Africa/Tunis" ) )  // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.

세부 사항

그 다른 대답은 또는 잘못된 시대에 뒤떨어진 클래스를 사용하다.

java.util 같은 오래 된 date-time 수업을 피하세요.Date/.Calendar.그들은 제대로 못해 혼동한 설계를 하는 것을 입증했다.

java.time

그 java.time 프레임워크 자바 8시와 후에 장착되어 온다.기능 중 많은 자바 6&7존재하고 안드로이드에 적응해 backported 있다.몇몇의 같은 사람들의 Joda-Time 만든에 의해 만들었다.

시간 표시 막대에 협정 세계시에 나노초의 해상도를 가진 인스턴트는 순간이었다.1970년 협정 세계시에 있는 그것의 시대는 첫 순간이었습니다.

밀리초의 1970-01-01T00에서 당신의 입력 데이터라고 가정하면 합계:00:00Z(는 질문에 분명하지 않), 그때 우리가 쉽게 하나의밀리초의 1970-01-01T00에서 당신의 입력데이터라고가정하면 합계시:00Z(는 질문에 분명하지 않), 그때 우리가 쉽게 하나를 인스턴스화할 수 있다를 인스턴스화할 수 있다.Instant.

Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );

instant.toString():2011-11-23T03:25:52.992Z

그 그Z그 표준 ISO8601형식 문자열에서 짧습니다.Zulu와 UTC을 의미한다.

시간대, ZonedDateTime하게 하기 위해서는 적절한 시간대 이름을 사용하여 신청하다.

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );

이 코드를 살다IdeOne.com.로 달리자

Asia/Kolkata시간 지대?시간 지대?

나는 당신읜 인도 시간대 당신의 방식에 영향을 주기도 없었다 생각해요.우리는 여기 당신 report,이 Asia/Kolkata 시간대로 조정 같은 time-of-day이 참조하십시오.08:55어떤 다섯시간 반 앞으로 우리 협정 세계시 값의 다섯시간 반 앞으로 우리 협정 세계시 가치가 있다 어떤 있다.03:25.

2011-11-23T08:55:52.992+05시 30분[아시아/콜카타]

기본 구역

JVM의 현재 기본 표준 시간대를 적용할 수 있다.기본값은 런타임 에 언제든지 변경될 수 있으므로 주의하십시오.JVM 내의 모든 앱 스레드에 있는 모든 코드는 현재 기본값을 변경할 수 있다.중요한 경우 사용자에게 원하는/예상 시간대를 요청하십시오.

ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

java.time 약

그 java.time 프레임워크 자바 8시와 후에 내장되어 있습니다.이러한 클래스 java.util 같은 성가신 오래 된 유산 날짜-타임 스탬프 수업 supplant.날짜, 캘린더,&SimpleDateFormat.

그 Joda-Time 프로젝트, 지금 정비 모드에서, java.time 수업으로 이동하기를 충고한다.

, 오라클 Tutorial이.검색은 StackOverflow 많은 예시와 설명.규격은 합동 전략 검토한 310.

한 JDBC 운전자 JDBC4.2또는 이후 준수하는 사용하면 직접 데이터베이스와java.time 개체 교환할 수 있다.주로 끈이나 java.sql 필요 없다*입니다.

는 어디 java.time 수업을 얻기 위해?

  • 자바 SE8, JavaSE9, 나중에 하고.
    • 붙박이
    • 표준 자바 API의 결합으로 구현하여 일부.
    • 자바 9가지 사소한 기능 및 수정 사항을 추가한다.
  • JavaSE6와 자바 SE7.
    • 그 java.time 기능의 대부분은 자바 6및, 7ThreeTen-Backport에 back-ported 있다.
  • 안드로이드
    • 그java.time 수업의 안드로이드 다발 구현의 나중의 버전이다.
    • 이전 안드로이드의 경우, ThreeTenABP 프로젝트 ThreeTen-Backport(위에 언급한)잘 적응하고 있다.어떻게 ThreeTenABP… 사용에 조심하세요.

그 ThreeTen-Extra 프로젝트 java.time 추가 클래스와 함께 확대되고 있다.java.time에 가능한 향후 추가로 이 프로젝트는 시험장.당신은 인터벌, YearWeek, YearQuarter 등과 같은 몇가지 유용한 수업 이곳에서는 구할 수 있다.

가장 쉬운 방법과 밀리초 단위로 양쪽의 타임 스탬프와 DateTimeZone 원하는 지정하는 Joda 매핑 되지 않은 드라이브의 클래스를 사용하는 것이다.

나의 강력한 내장형 자바 날짜고 달력 클래스를 피하고;그들은 끔직하다고 권한다.

millis의 1월 1일 1970년 그리니치 표준시가 출범한 이후 millis 값은 숫자와 JVM을 위해서는 표준, 그 때 지역의 독립적이다.특정 시간대로 다시 포맷하고 싶다면, 단순히 GregorianCalendar개체와 그 timezone 놓변환할 수 있습니다.그 다음에 수많은 방법으로 다시 포맷할 있다.

나의 솔루션

public class CalendarUtils {

    public static String dateFormat = "dd-MM-yyyy hh:mm";
    private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);

    public static String ConvertMilliSecondsToFormattedDate(String milliSeconds){
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(Long.parseLong(milliSeconds));
        return simpleDateFormat.format(calendar.getTime());
    }
}

Easiest 방법:

private String millisToDate(long millis){

    return DateFormat.getDateInstance(DateFormat.SHORT).format(millis);
    //You can use DateFormat.LONG instead of SHORT

}

나는 이렇게 합니다.

static String formatDate(long dateInMillis) {
    Date date = new Date(dateInMillis);
    return DateFormat.getDateInstance().format(date);
}

또한 수 있또한 사용할을 사용할 수 있getDateInstance(int style)다음 매개 변수가:다음매개 변수가:

DateFormat.SHORT

DateFormat.MEDIUM

DateFormat.LONG

DateFormat.FULL

DateFormat.DEFAULT

SimpleDateFormat 클래스는 DateFormat 클래스에서 상속되는 SetTimeZone(TimeZone)이라는 메서드가 있다.http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html

당신은 java.time api를 시도할 수 있다.

        Instant date = Instant.ofEpochMilli(1549362600000l);
        LocalDateTime utc = LocalDateTime.ofInstant(date, ZoneOffset.UTC);

아래는 milliseconds에서 date 형식으로 날짜를 가져오는 나의 해결책이다.이 코드를 실행하려면 다 라이브러리를 사용해야 한다.

import java.util.GregorianCalendar;
import java.util.TimeZone;

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

public class time {

    public static void main(String args[]){

        String str = "1431601084000";
        long geTime= Long.parseLong(str);
        GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central"));
        calendar.setTimeInMillis(geTime);
        DateTime jodaTime = new DateTime(geTime, 
               DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central")));
        DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd");
        System.out.println("Get Time : "+parser1.print(jodaTime));

   }
}
public static LocalDateTime timestampToLocalDateTime(Long timestamp) {
    return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), TimeZone.getDefault().toZoneId());
}
 public static String getFormatTimeWithTZ(Date currentTime) {
    SimpleDateFormat timeZoneDate = new SimpleDateFormat("EEE, dd-MM-yyyy  hh:mm a", Locale.getDefault());
    return timeZoneDate.format(currentTime);
}

출력은

Mon,01-03-2021 07:37 PM

그리고.

public static String getFormatTimeWithTZ(Date currentTime) {
    SimpleDateFormat timeZoneDate = new SimpleDateFormat("EEE, dd-MM-yyyy  HH:mm ", Locale.getDefault());
    return timeZoneDate.format(currentTime);
}

생산량은

Mon,01-03-2021 19:37

만약 당신을 원하지 않는다는 데이즈 그리고 EEE,을 제거한다.
만약 당신을 원하지 않는다 날짜 그리고 dd-MM-yyyy을 제거한다.
만약 당신이 시간, 보고, 둘째, Millisecond에는 시간 필요한 다음 HH:mm:ss.SSS.

원하는 곳에 이 방법을 호출하십시오.

getFormatTimeWithTZ(Mydate)

어디에

Date Mydate = new Date(System.currentTimeMillis());

참조URL: https://stackoverflow.com/questions/8237193/how-to-convert-currenttimemillis-to-a-date-in-java

반응형