2013-09-30 195 views
0

我正在使用具有日期选择器的注册表单。当用户选择一个日期时,TextView更新将以格式(MM-dd-YYYY)显示选定的日期。当用户点击提交按钮时,它将表单数据传递给mysql数据库。它显然不插入日期,因为它没有以(yyyy-MM-dd)的正确格式。我尝试使用SimpleDateFormat方法,但无法使其工作。有人可以帮助我了解如何格式化日期吗?将日期格式化为mysql格式

datedob = (TextView) findViewById(R.id.reg_dob); 

String dob = datedob.getText().toString(); 

我的日期选择器代码:

public void populateSetDate(int year, int month, int day) { 
    datedob = (TextView)findViewById(R.id.reg_dob); 
    datedob.setText(month + "-" + day + "-" + year); 
} 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
    } 

    public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
     populateSetDate(yy, mm+1, dd); 
    } 

} 

回答

1

需要两个DateFormat实例:

  • 之一,从您TextView解析日期字符串。
  • 一个将解析的日期格式化为所需的表示形式。

这看起来有点像这个问题,假设您TextView包含选定日期的"MM-dd-yyyy"格式化表示:

String dobSource = datedob.getText().toString(); 
Date dobDate = new SimpleDateFormat("MM-dd-yyyy").parse(dobSource); 
String dobTarget = new SimpleDateFormat("yyyy-MM-dd").format(dobDate); 

可以潜在地避免通过保持Date的轨道从TextView转换日期字符串或Calendar参考,每当onDateSet(...)受到影响时更新参考。那么这个实例将有效地成为支持TextView的数据模型以及最终被插入到数据库中的值。

这就是说,我个人更倾向于在最基本的表示中存储/保留日期:作为long的值。这些值通常更容易处理(因为您避免任何解析),并且通常可以在各种平台之间更好地互换。最后,存储日期应该全部是关于实际数据 - 任何具体的表示/格式只会使事情进一步复杂化。

+0

所以你说,从onDateSet方法拉日期会比从TextView中拉出日期更好?如果是这样,我将如何拉它? – Carbongixxer

+0

我想我已经在上面的答案中解释了它的要点:创建一个'Calendar'实例,每次通过'onDateSet(...)'进入新值。然后,您可以将它用作“TextView”和最终插入到数据库中的值的后备数据模型。请注意,这只是我会考虑的方法 - 它不是* only *解决方案。由你决定如何实际执行。 –