问题
你需要格式化一个日期,而SimpleDateFormat类又不是线程安全的.此外,你还需要标准的ISO日期格式.
解决方案
使用FastDateFormat,它可以线程安全地格式化Java的Date对象.此外也可使用DateFormatUtils中的
共有静态FastDateFormat实例,该实例对应着ISO8601所定义的日期时间格式标准.下面的例子以国际标准
格式输出指定时区的日期和时间.
Date now = new Date();
String isoDT = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(now);
System.out.println("It is currently: "+isoDT);
这段代码将显示当前的时间和时区信息:
It is currently: 2004-03-26T16:20:00-07:00
DateFormatUtils还维护了许多符合ISO 8601标准的变量.见下表:
ISO_DATE_FORMAT yyyy-MM-dd 例: "2004-01-02"
ISO_DATE_TIME_ZONE_FORMAT yyyy-MM-ddzz 例: "2004-01-02-07:00"
ISO_DATETIME_FORMAT yyyy-MM-dd'T'HH:mm:ss 例: "2004-01-02T23:22:12"
ISO_DATETIME_TIME_ZONE_FORMAT yyyy-MM-dd'T'HH:mm:ssZZ 例: "2004-01-02T21:13:45-07:00"
ISO_TIME_FORMAT 'T'HH:mm:ss 例: "T04:23:22"
ISO_TIME_NO_T_FORMAT HH:mm:ss 例: "05:12:34"
ISO_TIME_NO_T_TIME_ZONE_FORMAT HH:mm:ssZZ 例: "12:32:22-07:00"
ISO_TIME_TIME_ZONE_FORMAT 'T'HH:mm:ssZZ 例: "T18:23:22-07:00"
SMTP_DATETIME_FORMAT EEE, dd MMM yyyy HH:mm:ss Z 例: "Wed, 01 Feb 2004 20:03:01 CST"
如果你准备使用自定义的日期格式,请使用FastDateFormat而不是SimpleDateFormat:
(不可以直接使用new 产生FastDateFormat对象,现在我们用DateFormatUtils与FastDateFormat类一起演示)
String timeStr1 = DateFormatUtils.format(now1, "yyyy-MM-dd HH:mm:ss");
String timeStr2 = DateFormatUtils.format(now1, "HH:mm:ss", TimeZone.getDefault(), Locale.getDefault());
String timeStr5 = FastDateFormat.getInstance("yyyy-MM-dd",TimeZone.getDefault(), Locale.getDefault()).format(now1);
为什么要在本可以使用SimpleDateFormat的时候转而使用FastDateFormat?SimpleDateFormat不是足够了吗?答案是:不够
SimpleDateFormat不是线程安全的,而FastDateFormat是.事实上你可以发现SUN的所有格式化类都不是线程安全的,如果多
个线程共用一个Java格式化对象,可能造成死锁,抛出RuntimeException异常或其它不协调的行为.如果在你的系统中有多个
线程共享一个SimpleDateFormat实例,建议你马上改为FastDateFormat类.
package test2;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.FastDateFormat;
/**
* 格式化日期
*
* @author Administrator
*/
public class DateFormatTest1 {
public static void main(String[] args) {
Date now = new Date();
Calendar now1 = Calendar.getInstance();
// DateFormatUtils维护的符合 ISO8601标准变量
String isoDT = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
.format(now);
String isoDT1 = DateFormatUtils.ISO_DATETIME_FORMAT.format(now1);
System.out.println("isoDT: " + isoDT);
System.out.println("isoDT1: " + isoDT1);
// 自定义时期格式
String timeStr1 = DateFormatUtils.format(now1, "yyyy-MM-dd HH:mm:ss");
String timeStr2 = DateFormatUtils.format(now1, "HH:mm:ss", TimeZone
.getDefault(), Locale.getDefault());
String timeStr3 = DateFormatUtils.format(now, "yyyy-MM-dd HH:mm");
String timeStr4 = DateFormatUtils.format(now, "yyyy-MM-dd HH:mm:ssZZ",
TimeZone.getDefault(), Locale.getDefault());
String timeStr5 = FastDateFormat.getInstance("yyyy-MM-dd",
TimeZone.getDefault(), Locale.getDefault()).format(now1);
System.out.println("timeStr1: " + timeStr1);
System.out.println("timeStr2: " + timeStr2);
System.out.println("timeStr3: " + timeStr3);
System.out.println("timeStr4: " + timeStr4);
System.out.println("timeStr5: " + timeStr5);
}
}
isoDT: 2009-07-08T18:26:31+08:00
isoDT1: 2009-07-08T18:26:31
timeStr1: 2009-07-08 18:26:31
timeStr2: 18:26:31
timeStr3: 2009-07-08 18:26
timeStr4: 2009-07-08 18:26:31+08:00
timeStr5: 2009-07-08
分享到:
相关推荐
其中,Lang组件是Jakarta Commons中的一个核心模块,它提供了大量的静态方法,用于处理基本Java对象,如字符串、数组、日期等。本文将深入探讨Jakarta Commons Lang组件以及在`commons-lang-2.3-src.zip`压缩包中的...
Apache Commons Lang是Java编程语言中的一个实用工具库,它提供了许多增强和补充Java核心类库功能的方法。在本例中,我们关注的是`commons-lang3-3.12.0.jar`包,这是Apache Commons Lang项目的最新版本。这个库包含...
Apache Commons Lang是Java开发中的一个非常重要的开源工具库,它提供了一系列实用的工具类,极大地丰富了Java的标准库,为开发者提供了更便捷、高效的方法来处理常见的编程任务。Lang包主要包含了对字符串操作、...
在`commons-lang3`中,`org.apache.commons.lang3.StringUtils`类是字符串处理的核心,提供了大量静态方法,如字符串的空判断、拼接、格式化、查找替换、分割、缩进等。例如,`isBlank()`可以判断字符串是否为空或仅...
- **字符串处理**:Apache Commons Lang 提供了丰富的字符串操作类`StringUtils`,如分割、连接、格式化、比较等,使得字符串操作更加简单直观。此外,还有`WordUtils`用于单词处理,`EscapeUtils`用于转义和非转义...
在实际开发中,`StringEscapeUtils`的这些方法广泛应用于数据格式化、输出安全以及输入验证等方面。例如,当用户输入的数据需要插入到HTML、XML或JavaScript代码中时,使用这些方法可以有效地防止恶意代码的注入。...
8. **格式化**:`capitalize()` 和 `uncapitalize()` 分别将字符串首字母转为大写或小写,`repeat()` 重复字符串一定次数。 9. **版本处理**:`VersionNumber` 类可以帮助解析和比较软件版本号,这对于处理依赖关系...
标签"commons-lang"直接指向了Apache Commons Lang项目,该项目是由Apache软件基金会维护的一系列模块化、可重用的Java组件。这些组件提供了诸如字符串操作、日期和时间处理、数学函数以及反射等高级功能,极大地...
4. **日期时间处理**:`DateUtils`和`DurationFormatUtils`提供了日期和时间的处理及格式化功能。 5. **数学运算**:`NumberUtils`提供了一些基本数值类型的工具方法。 总的来说,Apache Commons Lang 3.1是一个...
Apache Commons Lang是Java开发者不可或缺的工具库之一,其中的2.4版本更是经典之作。这个jar包,名为"commons-lang-2.4.jar",提供了大量的Java语言扩展,极大地丰富了Java的内置功能,为开发工作带来了极大的便利...
Aduna Commons Lang 是Apache Commons项目的一部分,Apache Commons 是一系列独立的、实用的Java组件集合,旨在为开发人员提供广泛的工具和实用程序,以解决常见的编程任务。这个库特别关注字符串处理、日期和时间...
Apache Commons Lang是Java开发中的一个关键组件,尤其在3.0.1版本中,它提供了大量的实用工具类,大大简化了日常的编程任务。这个名为"commons-lang3-3.0.1.jar"的文件就是Apache Commons Lang 3.0.1的库文件,它是...
`DateUtils`可以进行日期的解析、格式化和比较,如`DateUtils.parseDate()`可以将字符串转换为日期对象,`DateUtils.isSameDay()`则可以判断两个日期是否为同一天。`FastDateFormat`是比`SimpleDateFormat`更高效的...
4. **日期和时间处理**:Apache Commons Lang中的DateUtils和DateFormatUtils提供了丰富的日期和时间操作,可以进行日期的比较、格式化和解析,使得开发者在处理时间相关问题时更加得心应手。 5. **字符串操作**:...
其中,`commons-lang3-3.7`是Lang组件的一个版本,它为Java开发者提供了一系列实用的工具类,极大地扩展了Java的标准库功能,尤其在Java Web开发中扮演着重要角色。 1. **String和CharSequence的处理**:`commons-...
首先,让我们详细了解Apache Commons Lang的主要组件和功能: 1. **CharUtils**: 提供了对字符操作的工具方法,如转换Unicode编码,避免在字符串处理中出现乱码问题。 2. **ClassUtils**: 这个类提供了许多与类...
这个压缩包"commons-lang-2.6-bin.rar"包含了Apache Commons Lang的版本2.6,这是一个广泛使用的开源组件,对于Java开发者来说非常重要。在本篇文章中,我们将深入探讨Apache Commons Lang 2.6的主要特性、使用场景...
它提供了许多实用工具类,包括异常处理、字符串操作、日期和时间格式化、枚举操作等,大大丰富了Java基础类的功能。 3. **Math**:Apache Commons Math 提供了一系列数学计算和统计方法,支持矩阵运算、线性代数、...
Lang库特别适合在需要进行复杂字符串处理、日期格式化或者需要更精细控制反射操作的场景中使用。 这三种Apache Commons库在Java开发中广泛应用,它们提高了代码的可读性和可维护性,降低了开发难度。将这些jar包...