如何根据系统的区域日期时间格式设置将字符串日期转换为日期对象?

How to convert string date to Date object as per the System's Regional date time format settings?

在我的项目中,我使用 Date class 的对象, 例如

Date date = Date(dateInStringForm);[Though it is deprecated]

它与 IST[Indian Standard Time] 完美配合,但是当我将控制面板 [Operating system : Windows7] 中的区域和语言设置更改为任何其他国家(例如葡萄牙)时,它会抛出 java.lang.IllegalArgumentException .我们如何才能使此转换通用?

以下是我的试用示例代码,

导入java.util.Date;

public class GenericDateTime {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
   //  Date date = new Date("Jan 20, 2015 3:19:52 PM"); //Indian Standard Time Format
    Date date = new Date("20/Jan/2015 15:19:51"); //Portugese Time Format
    System.out.println("Date Object Form--->>>" + date);
}

}

与时区无关。您提供的格式与 Date() 允许并可以解析的格式不同。没有通用的方法可以接受任何类型的 日期格式,而无需在转换前不知道格式

因此,要接受任何特定格式,您可以使用 SimpleDateFormat

     public static void main(String[] args) {

        SimpleDateFormat dateFormat= new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss");
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        try {
            Date date = dateFormat.parse("20/Jan/2015 15:19:51");
            System.out.println(date);
        } catch (ParseException e) {

            e.printStackTrace();
        }


  }

您可以使用 SimpleTimeFormat 指定日期格式并将日期字符串作为 UTC 时间传递,而不是将日期作为字符串传递。如果您可以自由使用外部库,Joda Time 将是您的最佳选择。