`
Snannan268
  • 浏览: 13987 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SimpleDateFormat格式处理日期,注意一下Locale(转)

阅读更多
我们通常都很喜欢用SimpleDateFormat来做一些日期和字符串之间的转换,就是所谓的format()和parse()了,具体用法看程序或者是JAVA的API文档,这里不累述了。

但是往往我们忘记了,JAVA的国际化这个让人欢喜让人愁的东西。

下面出现一个问题:
以下程序段

    String dateStr = "17/Mar/2003 11:30:51";
    SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss");
    Date date = frm.parse(dateStr);


    SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    System.out.println("reformat : " +  frm1.format(date));

这运行时会抛出异常java.text.ParseException: Unparseable date: "17/Mar/2003 11:30:51",显然程序不能parse到“Mar”这个英文月的缩写。但是按照java上面的文档显示,以上程序是没有问题的。一个典型的运行时异常。不用说考虑一下我们的环境。

当前程序编写的环境是中文winxp,jdk1.4.2,IDEA 4.0,呵呵,我们是中国人当然都喜欢用中文环境啦。问题出来了吧?看一下一段代码:
            Date date = new Date(); 
            SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
            System.out.println("now : " +  frm1.format(date));

输出结果是:now : 2004/二月/24 11:57:00

看到了,缺省状态底下,我们用SimpleDateFormat是按照我们当前系统的Locale(请恕我一直都搞不清楚他的中文翻译)的,也就是中文的Locale,但是我们要进行分析的日期字符串是英文的,当然就认不出来了。
ok,知道了之后,我们修改一下加多个locale进去,让SimpleDateFormat在构造的时候指定Locale(Java是很笨的,我们不说他怎么知道呢?)告诉他我们现在要处理的是英文的格式串
            Locale locale = Locale.US;
            String dateStr = "17/Mar/2003 11:30:51";
            SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss", locale);
            Date date = frm.parse(dateStr);

            SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", locale);
            System.out.println("reformat : " +  frm1.format(date));


程序正常了……
问题主要就是出在我们在不同环境底下对一些国际化处理上面的不小心或者容易忽略的地方
分享到:
评论

相关推荐

    Java SimpleDateFormat中英文时间格式化转换详解

    SimpleDateFormat使用方法根据上面的“日期和时间模式”,设定需要匹配的模式,可以实现String与Date类型的互转,例如: * 时间格式: “2015-08-28”, 模式: “yyyy-MM-dd” * 时间格式: “2015-08-28 18:28:30”...

    日期格式转换的Java实现

    这里需要注意的是,在定义第二个日期格式时,除了指定模式字符串之外,还指定了`Locale.US`,这意味着日期将以美国英语的格式显示,例如月份将显示为全名(如January)而不是缩写(如Jan)。 #### 3. 输入读取与...

    详解Java中格式化日期的DateFormat与SimpleDateFormat类

    `DateFormat`和`SimpleDateFormat`类在处理国际化时也很有用,可以通过`setLocale(Locale locale)`方法设置区域设置,以适应不同地区的日期和时间格式习惯。 总之,`DateFormat`和`SimpleDateFormat`是Java中处理...

    JSTL格式化日期(一个jstl写的格式化日期,有用的着的看看吧)

    在JSTL中,我们可以使用`fmt`标签库来格式化日期和时间,这在显示和处理日期数据时非常有用。 `fmt`标签库是JSTL的一个重要组成部分,它基于Java的`java.text.SimpleDateFormat`类,可以对日期进行各种格式化操作。...

    Date日期时间 各种转换

    这些类提供了丰富的API来处理日期时间的转换、格式化以及计算等问题。 2. **日期时间格式化** - `SimpleDateFormat` 类提供了格式化和解析日期的方法。它允许用户自定义日期/时间格式。例如,可以设置为“dd/MM/...

    Java int 转 时间格式

    ### Java int 转 时间格式 在Java编程中,经常需要处理时间...综上所述,这个方法实现了将一个`int`类型的时间戳转换为指定格式的日期字符串的功能,但在实际应用中还需注意异常处理、性能优化以及国际化支持等问题。

    与众不同的 Java 日期格式化大全

    在 Java 中,我们通常使用 `java.text.SimpleDateFormat` 类来处理日期和时间字符串的格式化。 日期格式化基础 在 Java 中,我们可以使用 `java.text.SimpleDateFormat` 类的 `format` 方法将日期对象格式化为符合...

    关于Locale的一个列子

    这个例子将展示如何使用`Locale`来改变应用程序中的语言环境,特别是在处理日期、时间格式时的差异。通过理解并应用`Locale`,开发者可以确保他们的软件能够适应全球不同地区的用户需求。 【知识点详细说明】: 1....

    Java时间格式转化

    在使用`SimpleDateFormat`类进行日期时间的格式化和解析时,需要注意以下几点: 1. **线程安全问题**:`SimpleDateFormat`不是线程安全的,在多线程环境中应该避免共享实例,或者使用`ThreadLocal`来管理。 2. **...

    Android获取时间戳,以及将时间戳转换为时间

    上述代码中,`SimpleDateFormat`允许我们定义日期和时间的格式。在这个例子中,我们选择了"年-月-日 时:分:秒"的格式。`Locale.getDefault()`用于获取设备的默认语言环境,确保日期和时间的显示符合用户习惯。 如果...

    Date格式化

    例如,`java.text.SimpleDateFormat`和`java.time.format.DateTimeFormatter`提供了设置locale的方法,以适应不同的日期格式习惯。 在实际开发中,日期格式化还涉及到与数据库交互、网络传输、JSON序列化等方面,...

    格林威治时间转化北京时间以及时间转换格式代码大全

    `java.text.SimpleDateFormat`是用于格式化和解析日期的类。你可以自定义日期格式,如"yyyy-MM-dd HH:mm:ss"。下面是一个例子,展示如何将日期字符串按照特定格式解析,然后转换成另一种格式: ```java import ...

    java时间转换.pdf

    `SimpleDateFormat`通过接受一个`Locale`对象来格式化日期时,会根据该区域的习惯来显示日期,如星期、月份的名称等。 示例代码: ```java SimpleDateFormat simpleFormat = DateFormat.getDateInstance(DateFormat...

    Springboot 全局日期格式化处理的实现

    Springboot 全局日期格式化处理的实现 Springboot 全局日期格式化处理的实现是指在 Springboot 应用程序中统一处理日期格式化的问题。日期格式化是指将日期和时间转换为特定的格式,以便于在应用程序中使用。在 ...

    java国际化&时间处理

    国际化允许软件适应不同地区的语言、文化习惯和格式,而时间处理则涉及日期、时间和时区的准确操作。这篇博客将深入探讨这两个主题。 首先,Java中的国际化主要依赖于`java.util.Locale`类,它代表了特定的语言环境...

    时间类型DateTime的处理.pdf

    需要注意的是,`SimpleDateFormat`的`setLenient(false)`方法用于确保日期时间格式的严格匹配,避免因不规范的输入导致意外的结果。 在实际应用中,可能需要根据不同的日期格式进行转换。例如,日期格式可能是"2002...

    时间类型DateTime的处理.docx

    Format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); //设定格式 dateFormat.setLenient(false); java.util.Date timeDate = dateFormat.parse(dateString); //util类型 java.sql.Date dateTime = new ...

    JSP中的日期空间

    在JavaServer Pages (JSP) 中,处理日期和时间是一项常见的任务,这通常涉及到日期的显示、格式化、计算和验证。"JSP中的日期空间" 提供了一种简便的方法来处理这些操作,使得开发者无需编写过多的底层代码,就可以...

    Android系统当前时间日期的获取

    接下来,我们可以通过`java.text.SimpleDateFormat`类来格式化日期和时间。这个类允许我们自定义日期和时间的显示格式。例如,如果要获取“年-月-日 时:分:秒”的格式,可以这样做: ```java import java.text....

Global site tag (gtag.js) - Google Analytics