2016-10-15 6 views
0

저는 PHP 배경이지만 안드로이드를 배우고 있습니다. 너무 근사하다면 실례합니다.변환 시간 : 분 AM/PM에서 유닉스 타임 스탬프로

시간, 분 및 오전/오후를 포함하는 세 개의 변수가 있습니다. 초 단위로 결합 된 값을 얻을 수 있도록 유닉스 타임 스탬프로 변환하는 방법은 무엇입니까?

String hours = String.valueOf(hourBox.getText()); // may contain a value like 05 
String minutes = String.valueOf(minuteBox.getText()); // may contain a value like 45 
String ampm = String.valueOf(ampmBox.getText()); // may contain a value like PM or AM 

// PHP way 
$timestamp = date('Y-m-d '.$hours.':'.$minutes.' '.$ampm); 
echo strtotime($timestamp); 

// What would be the equivalent of this in Java? 
+1

자바의 캘린더 클래스를 사용하십시오. 시, 분, 초를 쉽게 추가 할 수 있습니다. 또는 simpledateformat –

+0

@HRaval FYI를 사용할 수 있습니다.'Calendar' 클래스는 이제 유산이며, java.time 클래스로 대체되었습니다. –

답변

1

당신은 그것을 위해 LocalDateTime을 사용해야합니다

String hours = "05"; 
    String minutes = "45"; 
    String ampm = "PM"; 

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd hh:mm a"); 
    LocalDateTime dateTime = LocalDateTime.parse(String.format("20160101 %s:%s %s", hours, minutes, ampm), formatter); 

    System.out.println(dateTime); 

을 경우 아직 LocalDateTime이없는, 당신이 SimpleDateFormat에 사용할 수 있습니다 :

String hours = "05"; 
    String minutes = "45"; 
    String ampm = "PM"; 

    SimpleDateFormat format = new SimpleDateFormat("hh:mm a"); 

    Date dateTime = format.parse(String.format("%s:%s %s", hours, minutes, ampm)); 

    System.out.println(dateTime); 

보시다시피이 코드는 거의 똑같다. 현재 날짜를 유지하려면

은, 달력으로 전환 :

String hours = "05"; 
    String minutes = "45"; 
    String ampm = "PM"; 

    Calendar calendar = GregorianCalendar.getInstance(); 
    calendar.setTime(new Date()); 
    calendar.set(Calendar.HOUR, Integer.parseInt(hours)); 
    calendar.set(Calendar.MINUTE, Integer.parseInt(minutes)); 
    calendar.set(Calendar.AM_PM, "AM".equals(ampm) ? 0 : 1); 

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a"); 

    System.out.println(format.format(calendar.getTime())); 
+0

내 Android Studio 버전에서 'LocalDateTime'을 (를) 사용할 수 없습니다. – asprin

+0

Java7 버전을 추가했습니다. 또한 @Basil Bourque 대답을 참조하십시오. –

+0

하지만 그 날짜는 1970 년 1 월 1 일로 간주됩니다. 현재 월, 일 및 일로 설정할 수 없습니까? – asprin

1

Answer by Soshin이 좋다. 그러나 개인적으로 나는 날짜와 시간을 따로 따로 작업 할 것입니다.

LocalTime

그리고 시간의 일

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("uuuuMMdd"); 
LocalDate ld = LocalDate.parse("20160101" , dateFormatter); 

LocalDate

. AM/PM 부분은 필요 없습니다. 서식 지정 코드는 예상 된 시간이 12 시간 또는 24 시간인지 여부를 나타냅니다.

DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hhmm"); // hh = two digits of 12-hour time (1-12). mm = minute-of-hour. 
LocalDate ld = LocalDate.parse(hours + minutes , timeFormatter); // 0545 in afternoon. 

LocalDateTime

당신은 그 (것)은 LocalDateTime에 결합 할 수 있습니다. 이 값의 특정 의도 시간대 알고있는 경우

LocalDateTime ldt = LocalDateTime.of(ld , lt); 

ZonedDateTime

하는 ZonedDateTime을 얻기 위해 ZoneId을 적용합니다.

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ldt.atZone(z); 

LocalDateTime은 의미가 없다; UTC 오프셋 또는 시간대와 관련된 컨텍스트가없는 실제 순간이 아닙니다. 반대로 ZonedDateTime은 사실 타임 라인의 실제 지점입니다.

java.time 프레임 워크 나중에 자바 8에 내장되어 java.time 소개

. 이 클래스는 java.util.Date, .Calendar, & java.text.SimpleDateFormat과 같이 문제가있는 이전 legacy 날짜 - 시간 클래스를 대체합니다.

Joda-Time 프로젝트는 현재 maintenance mode에 있으며, java.time으로 마이그레이션하는 것이 좋습니다.

자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.

어디에서 java.time 클래스를 얻을 수 있습니까?

  • Java SE 8SE 9 이후
    • 내장한다.
    • 번들로 구현 된 표준 Java API의 일부입니다.
    • Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
  • Java SE 6 및 java.time 기능의 대부분
  • Android
    • ThreeTenABP 프로젝트 적응 ThreeTen - 백 포트 구체적 안드로이드 (상술 한).
    • How to use…을 참조하십시오.

ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval, YearWeek, YearQuartermore과 같은 유용한 클래스가 있습니다.

+0

'LocalDate'는 (는) 내 Android Studio 버전에서 사용할 수없는 이유입니다. – asprin

+0

@asprin 제 대답에'Android '를 다시 읽으십시오. –

관련 문제