1

我有一个字符串,它返回日期和时间为 2012-11-08 12:45:30 。我需要以单独的字符串获取日期和时间,然后必须以电话的日期和时间设置中的格式显示日期。这是我迄今为止尝试过的代码:来自 db 的日期值是2012-11-08 我在手机设置中获取的日期格式为

String datefrmt = Settings.System.getString(
                context.getContentResolver(), Settings.System.DATE_FORMAT);

将此格式应用于从 db 获得的日期的代码是:

SimpleDateFormat sdf = new SimpleDateFormat(datefrmt);
java.util.Date date_1 = sdf.parse("2012-11-08");
String s = sdf.format(date_1);

我得到了正确的月份和日期,但年份它随机返回一些东西,这不是一个正确的值。谁能指导我哪里出错了。谢谢

4

4 回答 4

0

由于您的数据库日期在 中yyyy-MM-dd,所以不要使用动态格式获取日期,否则会崩溃(抛出解析异常),而是使用如下静态格式获取日期。您可以使用动态格式来转换字符串,如下所示:

   //use static format to convert into date from static formatted data in db 
   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
   java.util.Date date_1 = sdf1.parse("2012-11-08");//got the date

   //use the dynamic format to convert into string
   SimpleDateFormat sdf2 = new SimpleDateFormat(datefrmt);
   String s = sdf2.format(date_1);
于 2012-11-08T06:32:00.900 回答
0

由于 final String format = Settings.System.getString(getActivity().getContentResolver(), Settings.System.DATE_FORMAT);//可能为 NULL
所以我自定义我的函数如下一般用途

@SuppressLint("SimpleDateFormat")
public String getCurrentShortDateFormat() { 
    final String[] SFs = new String [] {
            "MM/dd/yyyy",
            "dd/MM/yyyy",
            "yyyy/MM/dd"
    }; 

    final Date date = new Date(24638400000L);//24638400000=Oct/13/1970; 0==Jan/1/1970
    java.text.DateFormat shortDateFormat = android.text.format.DateFormat.getDateFormat(getActivity().getApplicationContext());      
    String current = shortDateFormat.format(date);
    SimpleDateFormat which = new SimpleDateFormat();
    for (int i = 0; i < SFs.length; i++) {
        which.applyPattern(SFs[i]);
        if (which.format(date).compareTo(current)==0)
            return SFs[i];
    }
    return null;
}

@Override
public void onResume() {
    super.onResume(); 
    Log.d(LOG_TAG, "----- onResume.CurrentShortDateFormat-----" + getCurrentShortDateFormat());
}
于 2015-02-11T06:17:58.547 回答
0

您可以将 simpleDateFormat 用作:

 SimpleDateFormat simpDate = new SimpleDateFormat(datefrmt,
                    Locale.ENGLISH);
  String s = simpDate.format(new Date());

作为参考,您可以参考开发者网站:

有关更多信息,请参阅此链接

于 2012-11-08T05:40:49.433 回答
0

如果您有 2012-11-08 12:45:30字符串并且想要将其解析为Date对象并将其格式更改为另一种格式(例如系统格式或2012-11-08格式):

try {
        String yourString="2012-11-08 12:45:30";

        //first we parse input date string and create Date object
        String inputDateString ="yyyy-dd-MM hh:mm:ss";
        SimpleDateFormat inputDateFormat = new SimpleDateFormat(inputDateString);
        java.util.Date  date = inputDateFormat.parse(yourString);

        //log
        Log.e(getClass().getName(), inputDateFormat.format(date));

        //create system date format 
        String dateformt = Settings.System.getString( this.getContentResolver(), Settings.System.DATE_FORMAT);
        //if its for some reason==null let it be "yyyy-dd-MM" 
        if(dateformt==null){
            dateformt="yyyy-dd-MM";
        }
        SimpleDateFormat systemDateFormat = new SimpleDateFormat(dateformt);
        String outputString = systemDateFormat.format(date);

        //log
        Log.e(getClass().getName(), outputString);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2012-11-08T06:41:30.697 回答