2016-03-23 8 views
-2

Aşağıdaki zaman damgasından saatler + dakikayı çıkarmaya çalışıyorum. Bu çalıştı:Java'da zaman damgasından Saat ve Dakika al al

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
Date date = sdf.parse("2016-03-23 18:08:59"); 

SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm"); 
sdf2.setTimeZone(TimeZone.getTimeZone("UTC")); 
String dateStr = sdf2.format(date); 

Ama ben "işlenmeyen özel durum: Java.text.parseException" olsun bu satırda:

Date date = sdf.parse(myTimeStampString);

kimse burada bana yardımcı olabilir?

+0

değişken myTimeStampString değeri nedir: Ben kullandığınız hangi derleyici emin değilim, Oracle'ın JDK Java derleyici daha ayrıntılı bir hata açıklamasını verir? – applecrusher

+0

@ user1917363 halihazırda – 4castle

+0

numaralı telefonunda. Bu, sorgunun ilk satırında belirttiğim gibi bir şey. – progNewbie

cevap

0

Yalnızca "18:08" olan dizenin bir kısmını almak istiyorsanız ve saat dilimine göre ayarlamak istemiyorsanız, dizenin o kısmını ayıklamak için String#substring(start, end) kullanabilirsiniz. Eğer saat dilimine göre ayarlamak istediğiniz DO Eğer

String fullTime = "2016-03-23 18:08:59"; 
String timeStr = fullTime.substring(11, 16); //extract "HH:mm" from "yyyy-MM-dd HH:mm:ss" 

, ardından try bloğu ekleyin.

String fullTime = "2016-03-23 18:08:59"; 
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), 
      df2 = new SimpleDateFormat("HH:mm"); 
df1.setTimeZone(TimeZone.getTimeZone("UTC")); 
df2.setTimeZone(TimeZone.getTimeZone("IST")); 
String timeStr = ""; 
try { 
    timeStr = df2.format(df1.parse(fullTime)); //parse throws ParseException 
} catch (ParseException e) { /* handle this */ } 

Bu kod zaman dilimi ayarlandıktan sonra "HH:mm" de değerine timeStr değiştirmek için girdi olarak en az değişken alır.

+1

Bunu düşündüm, ama kötü bir stil ya da güvensiz olacağını düşündüm. – progNewbie

+0

Tarih dizesinden bir tarih nesnesine veya kullanıcı girdisi olmayan bazı güvenli yerlere sahip olmanız güvenli değildir. Tam olarak ne yaptığını açıklayan kodda yorum yazmalısınız. – 4castle

+1

Cevabımı güncelledim, böylece 'substring' olmadan nasıl yapabileceğinizi ve kodunuzu nasıl uyarlayabileceğinizi gösterdim. – 4castle

3

Sorunuzu nasıl ifade ettiğinizden net olmamakla birlikte, tek mantıklı açıklama istisnanın atılmamasıdır, ancak bir derleyici hatasına başvurmanız gerekir.

ParseException bir özel durum istisnasıdır ve kaynak kodunuz tarafından kullanılmalıdır, aksi halde derlenmez.

error: unreported exception ParseException; must be caught or declared to be thrown

+0

Ah, bu onların kodlarının neden çalışmadığını açıklıyor, çünkü evet, zaten çalışıyor. Sadece bir deneme bloğuna konması gerekiyor. – 4castle

+0

Ancak, saat hala 12 saate dönüştürülüyor. Bunu düzeltmek için, sadece "HH" yi "kk" olarak değiştirmeleri gerekir, böylece girdi 24 saat olarak biçimlendirilir. – 4castle

+0

@ 4castle Ne demek istediğinden emin değilim. Soru, ParseException hakkındaydı ve 12/24 saatlik farklarla ilgili herhangi bir sorunla ilgili değildi. Hem HH hem de kk modelleri 24 saat dayanır, saatin 0-23 olarak biçimlendirildiği HH ve 1-24 olarak kk. – jarnbjo