按照官方文件http://developer.android.com/guide/topics/ui/controls/pickers.html#DatePicker.
我只使用了相同的代码,只在onDateSet方法中添加了结果格式:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(c.getTime());
// How to get the string from here to the caller?
}
}
对于测试,调用者活动只是显示TextView
并在用户触摸小部件时调用选择器:
public class OrderHeadEditActivity extends Activity {
private TextView mDTDelivery;
...
@Override
protected void onCreate(Bundle bundle) {
...
mDTDelivery = (TextView) findViewById(R.id.order_head_view_dt_delivery);
...
mDTDelivery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
}
});
}
...
}
显示日期选择器,在将结果格式化为字符串的位置设置断点后,我可以看到它是有效的。
但是,我不知道如何将字符串值传递回mtDTDelivery
小部件?
正确的方法是创建对传递字符串的活动的回调。
看看与活动沟通
正如tyczj所指出的,您可以使用接口方法,也可以将datapicker类作为activity类的内部类,在这种情况下,它应该是静态的,并且需要对outerclass进行弱引用
使用界面。
在DatePickerFragment中定义接口。在activity类中实现该接口,并将日期设置为textview。
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
TheListener listener;
public interface TheListener{
public void returnDate(String date);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
listener = (TheListener) getActivity();
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(c.getTime());
if (listener != null)
{
listener.returnDate(formattedDate);
}
}
}
主要活动
public class MainActivity extends Activity implements DatePickerFragment.TheListener{
Button b;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b= (Button) findViewById(R.id.button1);
tv= (TextView) findViewById(R.id.textView1);
b.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void returnDate(String date) {
// TODO Auto-generated method stub
tv.setText(date);
}
}
第二种方法不确定这是否是最好的方法。我建议使用上述接口方法。
public class MainActivity extends Activity {//implements DatePickerFragment.TheListener{
Button b;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b= (Button) findViewById(R.id.button1);
tv= (TextView) findViewById(R.id.textView1);
b.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
private WeakReference<MainActivity> mActivity;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
mActivity = new WeakReference<MainActivity>((MainActivity) getActivity());
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(c.getTime());
MainActivity target = mActivity.get();
if (target != null) target.tv.setText(formattedDate);
}
}
}
我有一个格式化的字符串日期 2020/04/16 (年/月/日) 我想把这个字符串解析成日期时间 显然不起作用,没有正确的日期格式。 有人知道把这个字符串解析成日期时间的最好方法是什么吗?
问题内容: 嗨,我有以下字符串:2012-05-20T09:00:00.000Z,我想将其格式化为20/05/2012,9am 如何在Java中这样做? 谢谢 问题答案: 用先 来,然后 到
问题内容: 如何将字符串日期格式转换为日期,我的日期字符串格式为 接下来,我没有运气尝试。 以上所有语句都给出了解析错误。 问题答案: 请阅读的文档time.Parse: 该布局通过显示参考时间(定义为 2006年1月2日星期一15:04:05-0700 如果它是值,将被解释;它用作输入格式的示例。然后将对输入字符串进行相同的解释。 所以正确的格式是
问题内容: 我正在使用代码将字符串格式化为日期 但是,如何将日期从格式转换为格式? 问题答案: 使用SimpleDateFormat#format(Date):
我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新
我有类似“2021-06-01”的字符串,我希望将其转换为“2021-06-01T00:00:00+02:00”。我知道,最简单的解决方案是串接: 但是,我希望使用来实现。目前我的解决方案是: 然后使用: 然而,它抱怨说: 有解决办法吗?