【问题标题】:How to parse and format International Dates to required standard in java?java - 如何在java中将国际日期解析和格式化为所需的标准?
【发布时间】:2015-09-08 06:21:30
【问题描述】:

在我们的项目中,我们正在尝试以特定的标准格式解析和格式化不同的国际日期,但这会导致无法解析的日期异常,这是我的示例代码:

import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class InternationalizationDate {

    public static void main(String[] args) throws ParseException {

        SimpleDateFormat dateFormatForDate = new SimpleDateFormat("MMM dd,yyyy");// Expected format

        @SuppressWarnings("unused")
        String stringDate = "00:00:00 08/09/2015";// This date can be in any format as per the systems local regional settings.

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

        System.out.println("Local Date Format Pattern : " + simpleDateFormat.toLocalizedPattern());

        // DateFormatSymbols dateFormatSymbols = simpleDateFormat.getDateFormatSymbols();
        // String[] eras = { "BC" };
        // dateFormatSymbols.setEras(eras);
        // simpleDateFormat.setDateFormatSymbols(dateFormatSymbols);

        Date date = simpleDateFormat.parse(stringDate);
        String formattedDate = dateFormatForDate.format(date);
        System.out.println("Converted Format : " + formattedDate);

    }
}

我们哪里出错了?

【问题讨论】:

  • 在您给出的代码中,值 ("00:00:00 08/09/2015") 显然与您指定的格式不匹配 ("MMM dd,yyyy ”)。你为什么要调用applyPattern 来强制简单的日期格式化程序使用该特定模式,而我认为它的重点是根据默认语言环境使用本地模式。 (诚​​然,即使那样,您也需要知道要使用哪种模式 - 例如,它是日期模式还是日期/时间模式。)
  • @JonSkeet 对不起,我只会更新代码。但是我们该如何处理呢,我的意思是日期格式可以是任何人?
  • 我们不知道您的数据来自哪里。您可能会尝试与区域设置关联的多种格式,或允许用户指定格式。
  • @JonSkeet 所以我们不能将任何格式的国际日期转换为特定格式?
  • 不是“以任何格式,不知道该格式是什么”不。您可以使用DateFormat.getDateInstance 等获取多种格式来尝试,但如果用户使用的不是这些格式,那么不,只是没有足够的信息。

标签: java localization internationalization format simpledateformat


【解决方案1】:

导致解析异常错误的原因是解析格式与日期格式不匹配,只需更改这行代码即可:

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

收件人:

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy"); 
 // this match with "00:00:00 08/09/2015"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多