正在寻找正确的日期格式: - “2017-07-06T18:03:39.195 + 0530”
如何在java中获取当前日期的+0530?
当我使用SimpleDateFormat时它给出+0000,而它应该给+0530。
=============================================== ==
我尝试过使用以下内容: -
SimpleDateFormat format = new SimpleDateFormat("enter code hereyyy-MM-dd HH:mm:ss.SSS Z");
String dateString = format.format(new Date());
System.out.println("value of dateString is :"+dateString);
上面的代码将输出: - dateString的值是:2017-07-10 06:51:27.250 +0000
虽然它应输出:+0530
请告诉我如何获得上述日期或当前日期的+0530偏移?
答案 0 :(得分:1)
DateTime dateTime = DateTime.now(); 的System.out.println(则DateTime.ToString( “YYYY-MM-dd'T'HH:MM:ss.SSSZ”));
输出(当前日期和适当的时区) - 2017-07-10T15:01:48.319 + 0530
答案 1 :(得分:1)
您可以将Java 8 DateTime API用于其他解决方案
ZoneId zone = ZoneId.systemDefault(); //It will give current System's timezone (IST for you)
Date date = new Date(); // Any date
DateTimeFormatter formatter= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS Z", Locale.ENGLISH);
ZonedDateTime zonedTime = ZonedDateTime.ofInstant(date.toInstant(), zone);
System.out.println(zonedTime.format(formatter));
以上代码将为您提供具有正确区域偏移的日期
答案 2 :(得分:0)
设置所需的时区。你的代码会像:
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss.SSS Z");
format.setTimeZone(TimeZone.getTimeZone("IST"));
String dateString = format.format(new Date());
System.out.println("value of dateString is :"+dateString);
答案 3 :(得分:0)
ZonedDateTime.now( ZoneId.of( "Asia/Kolkata" ) ).toOffsetDateTime().toString()
OffsetDateTime
要直接解决问题,请使用现代的OffsetDateTime
c激光眼镜。
OffsetDateTime.now().toString()
请参阅此code run live at IdeOne.com。
odt.toString():2019-08-22T17:44:00.219684Z
这将使用标准ISO 8601格式生成一个字符串,该字符串表示JVM当前默认时区使用的偏移量中的当前时刻。区别之一:该方法将在偏移的小时和分钟之间包含可选的COLON :
字符。我建议不要忽略该字符,因为我已经看到多个库在此类输入上中断,并期望COLON在那里。
捕获当前时刻时,结果可能会解析为微秒。如果您希望使用毫秒,则将其截断,将其截去。
OffsetDateTime.now().truncatedTo( ChronoUnit.MILLIS )
odtTruncated.toString():2019-08-22T17:44:00.219Z
在IdeOne.com上运行的代码在JVM中,对于UTC本身,偏移量设置为零。因此,我们在末尾看到了Z
,它是+00:00
的常见标准替代品,发音为“ Zulu”。
您可能要明确指定偏移量。
Instant instant = Instant.now() ; // Current moment in UTC.
ZoneOffset offset = ZoneId.of( "Asia/Kolkata" ).getRules().getOffset( instant ) ; // We must pass a moment. India is currently at five and a half hours ahead of UTC. But it has not always been so in the past, and may not always be so in the future.
OffsetDateTime odt = instant.atOffset( offset ) ;
odt.toString():2019-08-22T23:00:06.925139 + 05:30
我认为更简洁的语法是使用ZonedDateTime
。
String output = ZonedDateTime.now( ZoneId.of( "Asia/Kolkata" ) ).toOffsetDateTime().toString() ;
2019-08-22T23:03:19.072681 + 05:30
ZonedDateTime
更有可能您应该在时区中获取当前时刻,而不是仅仅偏移。如果是这样,请参阅Answer by RaT。
请注意偏移量和区域之间的区别:
Continent/Region
格式的名称,例如America/Montreal
或Africa/Tunis
。通常,您应该避免使用可怕的日期时间类,例如java.util.Date
和SimpleDateFormat
,它们现在都是旧的。始终使用Instant
,OffsetDateTime
和ZonedDateTime
。切勿使用Date
和Calendar
。
但是,如果必须与 java.time 类尚未更新的旧代码进行互操作时必须使用旧类,则可以来回转换。显示在Answer by RaT中。