Java 希望当前日期和时间在“中”;年月日HH:MM:ss.ss“;格式

Java 希望当前日期和时间在“中”;年月日HH:MM:ss.ss“;格式,java,Java,我使用以下代码以“dd/MM/yyyy HH:MM:ss.ss”格式获取日期 我得到以下输出 Current date in String Format: 05/01/2012 21:10:17.287 Current date in Date Format: Thu Jan 05 21:10:17 IST 2012 请建议我应该如何以相同的字符串格式(dd/MM/yyyy HH:MM:ss.ss)显示日期,即我需要以下输出: Current date in Strin

我使用以下代码以“dd/MM/yyyy HH:MM:ss.ss”格式获取日期

我得到以下输出

    Current date in String Format: 05/01/2012 21:10:17.287
    Current date in Date Format: Thu Jan 05 21:10:17 IST 2012
请建议我应该如何以相同的字符串格式(dd/MM/yyyy HH:MM:ss.ss)显示日期,即我需要以下输出:

    Current date in String Format: 05/01/2012 21:10:17.287
    Current date in Date Format: 05/01/2012 21:10:17.287

请建议

您不能-因为您正在调用
Date.toString()
,如果系统时区是默认区域设置的默认日期格式,则它将始终包含系统时区。
Date
值本身没有格式概念。如果要以特定方式格式化,请使用
SimpleDataFormat.format()
。。。使用
Date.toString()
几乎总是一个坏主意。

下面的代码给出了预期的输出。那是你想要的吗

import java.util.Calendar;
import java.util.Date;

public class DateAndTime {

    public static void main(String[] args) throws Exception {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SS");
        String strDate = sdf.format(cal.getTime());
        System.out.println("Current date in String Format: " + strDate);

        SimpleDateFormat sdf1 = new SimpleDateFormat();
        sdf1.applyPattern("dd/MM/yyyy HH:mm:ss.SS");
        Date date = sdf1.parse(strDate);
        String string=sdf1.format(date);
        System.out.println("Current date in Date Format: " + string);

    }
}
使用:


第一个打印行中的输出正在使用格式化程序。第二个字符串中的输出(通过解析字符串创建的日期)是使用date#toString输出的,该字符串根据其自身的规则进行格式化。也就是说,您没有使用格式化程序

规则与您在此处看到和描述的内容一致: ()

简化格式

sdf=new SimpleDateFormat("dd/MM/YYYY hh:mm:ss");
String dateString=sdf.format(date);
它将给出您期望的输出
28/09/2013 09:57:19

tl;博士
  • 使用现代java.time类
  • 切勿使用
    日期
    /
    日历
    /
    SimpleDateFormat
例如:

ZonedDateTime                                // Represent a moment as seen in the wall-clock time used by the people of a particular region (a time zone).
.now(                                        // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )              // Always specify time zone using proper `Continent/Region` format. Never use 3-4 letter pseudo-zones such as EST, PDT, IST, etc.
)
.truncatedTo(                                // Lop off finer part of this value.
    ChronoUnit.MILLIS                        // Specify level of truncation via `ChronoUnit` enum object.
)                                            // Returns another separate `ZonedDateTime` object, per immutable objects pattern, rather than alter (“mutate”) the original.
.format(                                     // Generate a `String` object with text representing the value of our `ZonedDateTime` object.
    DateTimeFormatter.ISO_LOCAL_DATE_TIME    // This standard ISO 8601 format is close to your desired output.
)                                            // Returns a `String`.
.replace( "T" , " " )                        // Replace `T` in middle with a SPACE.
java.time 现代方法使用java.time类,这些类在几年前就取代了可怕的旧日期时间类,如
Calendar
&
SimpleDateFormat

想要当前日期和时间吗

使用
Instant
捕捉UTC当前时刻

Instant instant = Instant.now() ;
要通过某个特定地区(时区)的人们使用的挂钟时间来查看同一时刻,请应用a来获取a

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

或者,作为快捷方式,将
ZoneId
传递给
zoneDateTime.now
方法

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "Pacific/Auckland" ) ) ;
time类使用的解析为。这意味着一秒钟小数点的九位数。如果只需要三毫秒。作为枚举对象传递所需的限制

ZonedDateTime
.now( 
    ZoneId.of( "Pacific/Auckland" ) 
)
.truncatedTo(
    ChronoUnit.MILLIS
)
以“dd/MM/yyyy HH:MM:ss.ss”格式

我建议在生成字符串时始终包含UTC或时区的偏移量,以避免歧义和误解

但如果您坚持,您可以在生成表示日期时间值的字符串时指定特定格式。内置的预定义格式化程序几乎可以满足您所需的格式,但对于
T
,您需要一个空格

String output = 
    zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
    .replace( "T" , " " )  
;
sdf1.applyPattern(“dd/MM/yyyy HH:MM:ss.ss”)

Date-Date=sdf1.parse(strDate)

切勿使用用于向人类演示的文本交换日期时间值

相反,请使用中为此目的定义的标准格式

在解析/生成字符串时,java.time默认使用这些ISO 8601格式

交换特定时刻时,始终包括UTC或时区的偏移指示器。因此,在进行数据交换时,应避免使用上面讨论的所需格式。此外,通常最好以UTC时间交换片刻。这意味着java.time中的
即时
。您可以从
分区日期时间
交换
即时
,在同一时刻、时间轴上的同一点,但不同的挂钟时间,有效地从时区调整为UTC

Instant instant = zdt.toInstant() ;
String exchangeThisString = instant.toString() ;
2018-01-23T01:23:45.123456789Z

此ISO 8601格式在末尾使用
Z
表示UTC,发音为“Zulu”


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(免责声明:这个答案不支持使用
      Date
      类(事实上,它早已过时,设计拙劣,所以我宁愿完全不鼓励它)。我尝试用一种格式回答一个关于日期和时间对象的定期重复出现的问题。为此,我使用
      日期
      类作为示例。其他类在结尾处处理

      你不会想的 您不需要特定格式的日期。除了最简单的一次性程序外,所有程序中的良好做法都是将用户界面与模型和业务逻辑分开。日期对象的值属于模型,因此请将日期保留在模型中,不要让用户直接看到。当坚持这一点,日期的格式将不再重要。每当用户看到日期时,将其格式化为
      字符串
      ,并向用户显示该字符串。同样,如果您需要特定格式来持久化或与另一个系统交换,请将
      日期
      格式化为字符串。如果用户需要输入日期和/或时间,接受字符串或使用日期选择器或时间选择器

      特殊情况:储存
      ZonedDateTime
      .now( 
          ZoneId.of( "Pacific/Auckland" ) 
      )
      .truncatedTo(
          ChronoUnit.MILLIS
      )
      
      String output = 
          zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
          .replace( "T" , " " )  
      ;
      
      Instant instant = zdt.toInstant() ;
      String exchangeThisString = instant.toString() ;
      
          System.out.println("Current date in Date Format: "+date);
      
      DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SS");
      LocalDateTime now = LocalDateTime.now();
      System.out.println(dtf.format(now)); 
      
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      String dateTimeString = LocalDateTime.now().format(formatter);
      System.out.println(dateTimeString);
      
      LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
      System.out.println(dateTime.toString());
      
      Date date = new Date();
      String strDate = sdf.format(date);
      
      Calendar cal = Calendar.getInstance();
      String strDate = sdf.format(cal.getTime());