2010-02-15 32 views
27

Cho một chuỗi tháng như:Chuyển đổi Tháng String để Integer trong Java

"Feb" 
or 
    "February" 

Có Java lõi hoặc chức năng thư viện của bên thứ ba mà sẽ cho phép bạn chuyển đổi chuỗi này với số tháng tương ứng trong một miền địa phương cách bất khả tri?

+1

là bạn chắc chắn 100% rằng chuỗi nhất định sẽ luôn luôn được " Tháng hai "và (ví dụ) không" Φεβ "; – cherouvim

+0

Bạn đã xem các thư viện ngày của Joda chưa? – dangerstat

+0

Có Joda đã phục vụ tôi tốt, nhưng không thể tìm thấy bất cứ điều gì trong đó để phân tích một chuỗi tháng để số tháng. @cherouvim: Tôi không chắc chắn tôi có ý nghĩa của bạn, cảm ơn – calid

Trả lời

26

Một thay thế cho SimpleDateFormat sử dụng Joda thời gian:

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

    // if default locale is ok simply omit '.withLocale(...)' 
    DateTimeFormatter format = DateTimeFormat.forPattern("MMM"); 
    DateTime instance  = format.withLocale(Locale.FRENCH).parseDateTime("août"); 

    int month_number   = instance.getMonthOfYear(); 
    String month_text  = instance.monthOfYear().getAsText(Locale.ENGLISH); 

    System.out.println("Month Number: " + month_number); 
    System.out.println("Month Text: " + month_text ); 

    OUTPUT: 
     Month Number: 8 
     Month Text: August 
41

Bạn có thể phân tích các tháng sử dụng SimpleDateFormat:

Date date = new SimpleDateFormat("MMM", Locale.ENGLISH).parse("Feb"); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    int month = cal.get(Calendar.MONTH); 
    System.out.println(month == Calendar.FEBRUARY); 

Hãy cẩn thận so sánh int month đến một int (nó không bằng 2!). An toàn nhất là so sánh chúng bằng cách sử dụng các trường tĩnh của Calendar (như Calendar.FEBRUARY).

+0

Có nhìn vào thời gian joda, nó là súc tích hơn, mạnh mẽ, và cung cấp cho số tháng dự kiến. Có một lý do tại sao SimpleDateFormat nên được ưa thích? Nếu tôi không thấy lý do tại sao không chọn thời gian Joda như câu trả lời ... cảm ơn – calid

+0

Ưu điểm duy nhất tôi có thể nghĩ là SimpleDateFormat không cần bất kỳ jar bên thứ 3 nào. Nhưng nếu tất cả đều giống với bạn, tôi sẽ đi cho chức năng (cao cấp) của Joda. –

+0

thời gian joda sẽ có hiệu quả là một phần của java lõi trong v8 với JSR 310 –

3

Java 8 giải pháp:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("MMM") 
              .withLocale(Locale.ENGLISH); 
TemporalAccessor accessor = parser.parse("Feb"); 
System.out.println(accessor.get(ChronoField.MONTH_OF_YEAR)); // prints 2 
0

bạn chỉ có thể thiết lập một Statment chuyển đổi, một cái gì đó như thế này (dưới đây). Tôi gửi bài này trong trường hợp bất cứ ai muốn có một đơn giản, dễ hiểu giải pháp Tôi biết tôi sẽ muốn nó trước khi tôi gõ này lên:

switch(input2) { 
      case "january": 
      case "jan": 
       input2 = "1"; 
      break; 

      case "febuary": 
      case "feb": 
       input2 = "2"; 
      break; 

      case "march": 
      case "mar": 
       input2 = "3"; 
      break; 

      case "april": 
      case "apr": 
       input2 = "4"; 
      break; 

      case "may": 
       input2 = "5"; 
      break; 

      case "june": 
      case "jun": 
       input2 = "6"; 
      break; 

      case "july": 
      case "jul": 
       input2 = "7"; 
      break; 

      case "august": 
      case "aug": 
       input2 = "8"; 
      break; 

      case "september": 
      case "sep": 
      case "sept": 
       input2 = "9"; 
      break; 

      case "october": 
      case "oct": 
       input2 = "10"; 
      break; 

      case "november": 
      case "nov": 
       input2 = "11"; 
      break; 

      case "december": 
      case "dec": 
       input2 = "12"; 
      break; 
      } 
Các vấn đề liên quan