如何让Java解析和格式化具有相同时区的日期/时间?我一直知道当地的时区
我的应用程序将所有Java日期保持为UTC。解析它们很容易,但当我打印出来时,屏幕上会显示计算机的本地时区,我想将其显示为UTC 示例代码:如何让Java解析和格式化具有相同时区的日期/时间?我一直知道当地的时区,java,timezone,utc,Java,Timezone,Utc,我的应用程序将所有Java日期保持为UTC。解析它们很容易,但当我打印出来时,屏幕上会显示计算机的本地时区,我想将其显示为UTC 示例代码: String sample = "271210 200157 UTC"; SimpleDateFormat dfmt = new SimpleDateFormat("ddMMyy HHmmss Z"); Date result = dfmt.parse(sample); System.out.printf("%tc\n", result); 结果是 美国
String sample = "271210 200157 UTC";
SimpleDateFormat dfmt = new SimpleDateFormat("ddMMyy HHmmss Z");
Date result = dfmt.parse(sample);
System.out.printf("%tc\n", result);
结果是
美国东部时间2010年12月27日星期一15:01:57
我想要的是
2010年12月27日星期一20:01:57 UTC
显然,我必须设置一些区域设置和时区值,但我不知道应该将它们放在哪里。
谢谢
Pat您可以为日期格式:
dfmt.setTimeZone(timeZone);
此外,您不希望打印日期对象本身,而是再次使用DateFormat
String formattedDate = dfmt.format(result);
您可以选择以下日期格式:
dfmt.setTimeZone(timeZone);
此外,您不希望打印日期对象本身,而是再次使用DateFormat
String formattedDate = dfmt.format(result);
避免java.util.Date
众所周知,旧的java.util.Date、.Calendar和SimpleDataFormat类非常麻烦。避开它们
在众多问题中,一个java.util.Date对象:
- 有一个深埋在里面的时区吗
- 出于最实际的目的,忽略该时区
- 有一个
方法实现,在生成内部UTC日期时间值的字符串表示形式时应用JVM的当前默认时区toString
DateTime dateTimeMontréal = dateTimeUtc.withZone( DateTimeZone.forID( "America/Montreal" ) );
String output = DateTimeFormat.forStyle( "FF" ).withLocale( Locale.CANADA_FRENCH ).print( dateTimeMontréal );
默认情况下,Joda Time和java.Time都使用ISO 8601格式来生成和解析日期时间值的字符串表示形式
在乔达时间2.7
String input = "271210 200157 UTC";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "ddMMyy HHmmss z" ).withZoneUTC();
DateTime dateTimeUtc = formatter.parseDateTime( input );
易于调整时区。为了好玩,让我们将UTC值移动到魁北克时区
DateTime dateTimeMontréal = dateTimeUtc.withZone( DateTimeZone.forID( "America/Montreal" ) );
String output = DateTimeFormat.forStyle( "FF" ).withLocale( Locale.CANADA_FRENCH ).print( dateTimeMontréal );
转储到控制台
System.out.println( "input : " + input );
System.out.println( "dateTimeUtc : " + dateTimeUtc );
System.out.println( "dateTimeMontréal : " + dateTimeMontréal );
System.out.println( "output : " + output );
输入:271210 200157 UTC
日期时间UTC:2010-12-27T20:01:57.000Z
日期时间:2010-12-27T15:01:57.000-05:00
产出:隆迪27日2010年12月15日01时美国东部时间
避免java.util.Date
众所周知,旧的java.util.Date、.Calendar和SimpleDataFormat类非常麻烦。避开它们
在众多问题中,一个java.util.Date对象:
- 有一个深埋在里面的时区吗
- 出于最实际的目的,忽略该时区
- 有一个
方法实现,在生成内部UTC日期时间值的字符串表示形式时应用JVM的当前默认时区toString
DateTime dateTimeMontréal = dateTimeUtc.withZone( DateTimeZone.forID( "America/Montreal" ) );
String output = DateTimeFormat.forStyle( "FF" ).withLocale( Locale.CANADA_FRENCH ).print( dateTimeMontréal );
默认情况下,Joda Time和java.Time都使用ISO 8601格式来生成和解析日期时间值的字符串表示形式
在乔达时间2.7
String input = "271210 200157 UTC";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "ddMMyy HHmmss z" ).withZoneUTC();
DateTime dateTimeUtc = formatter.parseDateTime( input );
易于调整时区。为了好玩,让我们将UTC值移动到魁北克时区
DateTime dateTimeMontréal = dateTimeUtc.withZone( DateTimeZone.forID( "America/Montreal" ) );
String output = DateTimeFormat.forStyle( "FF" ).withLocale( Locale.CANADA_FRENCH ).print( dateTimeMontréal );
转储到控制台
System.out.println( "input : " + input );
System.out.println( "dateTimeUtc : " + dateTimeUtc );
System.out.println( "dateTimeMontréal : " + dateTimeMontréal );
System.out.println( "output : " + output );
输入:271210 200157 UTC
日期时间UTC:2010-12-27T20:01:57.000Z
日期时间:2010-12-27T15:01:57.000-05:00
产出:隆迪27日2010年12月15日01时美国东部时间
谢谢。输出端的代码正是我想要的SimpleDataFormat Outpmt=新的SimpleDataFormat(“EEE,d MMM yyyy HH:mm:ss Z”)
outfmt.setTimeZone(TimeZone.getTimeZone(“UTC”)
字符串formattedDate=outpmt.format(结果)
系统输出打印项次(格式化日期)
谢谢。输出端的这段代码正是我想要的
SimpleDataFormat Outpmt=新的SimpleDataFormat(“EEE,d MMM yyyy HH:mm:ss Z”)
outfmt.setTimeZone(TimeZone.getTimeZone(“UTC”)
字符串formattedDate=outpmt.format(结果)
系统输出打印项次(格式化日期)