2014-11-09 2 views
3

В настоящее время я использую Scene Builder для создания сцен javafx. Я хочу получить значение из списка выбора даты в определенном формате. Просто используя datePicker.getValue() возвращает значение даты в форме yyyy-mm-dd. Я хочу его в MMM dd, yyyy form. Кто-нибудь может мне помочь?JavaFX DatePicker getValue в определенном формате

Текущий полный код datePickerController это

package date.picker; 

import java.net.URL; 
import java.time.LocalDate; 
import java.time.format.DateTimeFormatter; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Alert.AlertType; 
import javafx.scene.control.Button; 
import javafx.scene.control.DatePicker; 
import javafx.scene.control.TextField; 
import javafx.util.StringConverter; 

/** 
* FXML Controller class 
* 
* @author Dushyant Patel 
*/ 
public class DatePickerController implements Initializable { 

@FXML 
private TextField display; 
@FXML 
private DatePicker datePicker; 
@FXML 
private Button getDateBtn; 
@FXML 
private Button setDateBtn; 

@FXML 
private void getDateAction(ActionEvent event) { 

    LocalDate date = datePicker.getValue(); 
    if (date != null) { 
     display.setText(date.toString()); 
    } else { 
     display.setText(""); 
    } 
} 

@FXML 
private void datePickerAction(ActionEvent event) { 
    LocalDate date = datePicker.getValue(); 
    if (date != null) { 
     display.setText(date.toString()); 
    } else { 
     display.setText(""); 
    } 
} 

@FXML 
private void setDateAction(ActionEvent event) { 
    if (!display.getText().trim().equals("")) { 
     if (display.getText().length() != 10) { 
      Alert alert = new Alert(AlertType.ERROR); 
      alert.setTitle("Error Dialog"); 
      alert.setHeaderText("Date Error"); 
      alert.setContentText("Please type date in the correct date format!"); 

      alert.showAndWait(); 
     } else { 
      LocalDate date = LocalDate.parse(display.getText()); 
      datePicker.setValue(date); 
     } 
    } else { 
     datePicker.setValue(null); 
    } 

} 

/** 
* Initializes the controller class. 
*/ 
@Override 
public void initialize(URL url, ResourceBundle rb) { 
    String pattern = "MMM dd, yyyy"; 
    StringConverter converter = new StringConverter<LocalDate>() { 
     DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); 

     @Override 
     public String toString(LocalDate date) { 
      if (date != null) { 
       return dateFormatter.format(date); 
      } else { 
       return ""; 
      } 
     } 

     @Override 
     public LocalDate fromString(String string) { 
      if (string != null && !string.isEmpty()) { 
       return LocalDate.parse(string, dateFormatter); 
      } else { 
       return null; 
      } 
     } 
    }; 

    datePicker.setConverter(converter); 
} 

} 
+0

возможный дубликат [дата Format в Java] (http://stackoverflow.com/questions/4772425/format-date-in-java) –

+0

Этот вопрос, похоже, имеет дело с 'java.util.Date', а не 'java.time.LocalDate' –

+0

Чтение твердо помогает .... :-D ... поэтому используйте: String date (LocalDate date) { DateTimeFormatter formatter = DateTimeFormatter. ofPattern ("MMM dd, yyyy"); return date.format (formatter); } –

ответ

0

Используйте SimleDateFormat:

SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy"); 
    setText(format.format(date)); 

... К сожалению LocalDate не дата ....

String date(LocalDate date) { 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy"); 
     return date.format(formatter); 
    } 
+0

Вы не можете использовать это с помощью 'java.time.LocalDate'. –

+0

Извините ... использование очков может помочь :-D –

1

Создать DateTimeFormatter с заданным вами шаблоном (синтаксис, который вы дали для шаблона, точно соответствует т; документы подробно описывают синтаксис шаблона).

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy"); 

// ... 

LocalDate date = datePicker.getValue(); 
if (date != null) { 
    display.setText(formatter.format(date)); 
} else { 
    display.setText(""); 
} 
3

DataPicker см конвертер в datapicker

datePicker.setConverter(new StringConverter<LocalDate>() { 
String pattern = "yyyy-MM-dd"; 
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); 

{ 
    datePicker.setPromptText(pattern.toLowerCase()); 
} 

@Override public String toString(LocalDate date) { 
    if (date != null) { 
     return dateFormatter.format(date); 
    } else { 
     return ""; 
    } 
} 

@Override public LocalDate fromString(String string) { 
    if (string != null && !string.isEmpty()) { 
     return LocalDate.parse(string, dateFormatter); 
    } else { 
     return null; 
    } 
} 
}); 
+0

Спасибо, это помогает много @ Reegan –

0

Использование setConverter не изменит формат метода .getValue(), который вы использовали, чтобы получить значение DatePicker setConverter изменится только отображаемую дату на DatePicker.

Для примера, чтобы получить значение DatePicker: -

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy",Locale.US); 
String formattedValue = (myDatePicker.getValue()).format(formatter); 

И установить значение DatePicker

String dateValue = "01 12, 2015"; 
myDatePicker.setValue(LocalDate.parse(dateValue,formatter)); 
Смежные вопросы