SimpleDateFormat类中可用的日期格式是什么?


82

谁能让我知道SimpleDateFormat类中可用的日期格式。

我已经通过api,但是找不到满意的答案。我们非常感谢您的帮助。


3
你追求什么格式?您必须构建一种包含所需元素的格式。
大卫·格兰特

3
您可以构造API允许的任何格式。没有明确的清单。
彼得·劳瑞

Answers:


137

日期和时间格式如下所述

SimpleDateFormat(Java Platform SE 7)-日期和时间模式

有可能是n格式,你可以做可能数。例如-dd/MM/yyyyYYYY-'W'ww-u您可以混合并匹配字母以实现所需的图案。图案字母如下。

  • G -时代代号(AD)
  • y 年(1996; 96)
  • Y -周年(2009; 09)
  • M -一年中的月份(7月; 7月; 07日)
  • w -一年中的一周(27)
  • W -每月的星期(2)
  • D -年度中的第一天(189)
  • d -每月的一天(10)
  • F -每月的星期几(2)
  • E -星期几(星期二;星期二)
  • u -星期几(1 =星期一,...,7 =星期日)
  • a -AM / PM标记
  • H -一天中的小时(0-23)
  • k -一天中的小时(1-24)
  • K -上午/下午(0-11)
  • h -上午/下午(1-12)小时
  • m -分钟(30)
  • s -每分钟(55)
  • S -毫秒(978)
  • z -通用时区(太平洋标准时间;太平洋标准时间; GMT-08:00)
  • Z -RFC 822时区(-0800)
  • X -ISO 8601时区(-08; -0800; -08:00)

解析:

2000-01-23T04:56:07.000 + 0000

使用: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");


谢谢Quoi ..但是您能告诉我如何将日期转换为EST,IST,gdt,gmt等不同的标准吗?
Abhishek_Mishra '10

1
然后,您正在寻找不同语言环境中的日期。SimpleDateFormat允许在构造函数中设置语言环境。SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder

好的,那是我一直在寻找的东西。谢谢Quoi .. :)
Abhishek_Mishra

感谢您的开放。:)
Subhrajyoti Majumder 2012年

不要混淆Z和'Z'。我很傻,希望其他人不会像我一样。
Tiefan Ju

52

让我抛出一些示例代码,这些代码是从http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html获得的 然后,您可以尝试不同的选项,直到理解为止。

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
   public static void main(String[] args) {
       Date now = new Date();

       //This is just Date's toString method and doesn't involve SimpleDateFormat
       System.out.println("toString(): " + now);  // dow mon dd hh:mm:ss zzz yyyy
       //Shows  "Mon Oct 08 08:17:06 EDT 2012"

       SimpleDateFormat dateFormatter = new SimpleDateFormat("E, y-M-d 'at' h:m:s a z");
       System.out.println("Format 1:   " + dateFormatter.format(now));
       // Shows  "Mon, 2012-10-8 at 8:17:6 AM EDT"

       dateFormatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
       System.out.println("Format 2:   " + dateFormatter.format(now));
       // Shows  "Mon 2012.10.08 at 08:17:06 AM EDT"

       dateFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy");
       System.out.println("Format 3:   " + dateFormatter.format(now));
       // Shows  "Monday, October 8, 2012"

       // SimpleDateFormat can be used to control the date/time display format:
       //   E (day of week): 3E or fewer (in text xxx), >3E (in full text)
       //   M (month): M (in number), MM (in number with leading zero)
       //              3M: (in text xxx), >3M: (in full text full)
       //   h (hour): h, hh (with leading zero)
       //   m (minute)
       //   s (second)
       //   a (AM/PM)
       //   H (hour in 0 to 23)
       //   z (time zone)
       //  (there may be more listed under the API - I didn't check)

   }

}

祝好运!


6

java.time

更新

其他问题已过时。可怕的传统类,例如SimpleDateFormat几年前被现代java.time类所取代。

自订

为了定义自己的自定义格式设置格式,中的代码与DateTimeFormatter中的代码相似,但并不完全相同SimpleDateFormat。请务必阅读文档。并搜索“堆栈溢出”中的许多示例。

DateTimeFormatter f = 
    DateTimeFormatter.ofPattern( 
        "dd MMM uuuu" , 
        Locale.ITALY 
    ) 
;

标准ISO 8601

ISO 8601标准定义格式的多种类型的日期时间值的。这些格式是专为数据交换而设计的,可以通过机器轻松解析,也可以被跨文化的人类轻松阅读。

生成/解析字符串时,java.time类默认使用ISO 8601格式。只需调用toStringparse方法。无需指定格式模式。

Instant.now().toString()

2018-11-05T18:19:33.017554Z

对于UTC中的值,Z最后的表示UTC,并发音为“ Zulu”。

本地化

您可以指定java.time 为您自动本地化,而不必指定格式设置模式。使用DateTimeFormatter.ofLocalized…方法。

使用特定地区(时区)的人们使用的挂钟时间获取当前时刻。

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ZonedDateTime.now( z );

明智地生成标准ISO 8601格式的文本,以将时区的名称添加在方括号中。

zdt.toString():2018-11-05T19:20:23.765293 + 01:00 [非洲/突尼斯]

生成自动本地化的文本。

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );

String output = zdt.format( f );

输出:lundi 5 novembre 2018à19:20:23 heure normale d'Europe centrale

通常,更好的做法是使用硬编码格式模式来自动定位而不是烦恼。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

现在处于维护模式Joda-Time项目建议迁移到java.time类。

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。Hibernate 5和JPA 2.2支持java.timejava.sql.*

在哪里获取java.time类?


5

在此处检查格式 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

主要

System.out.println("date  : " + new classname().getMyDate("2014-01-09 14:06", "dd-MMM-yyyy E hh:mm a z", "yyyy-MM-dd HH:mm"));

方法

 public String getMyDate(String myDate, String returnFormat, String myFormat)
            {
                DateFormat dateFormat = new SimpleDateFormat(returnFormat);
                Date date=null;
                String returnValue="";
                try {
                    date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
                    returnValue = dateFormat.format(date);
                } catch (ParseException e) {
                    returnValue= myDate;
                    System.out.println("failed");
                    e.printStackTrace();
                }

            return returnValue;
            }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.