在 java 中将字符串日期转换为美国格式
converting a string date into US format in java
我有以下代码,其中日期为字符串类型,我必须将其设置为美国格式
所以在下面我展示了它
private static final SimpleDateFormat usOutputDate = new SimpleDateFormat("MM/dd/yyyy");
在一个方法中,我编写了下面的代码,在 dealDateString
中,值是 02-Mar-2015
// dealDateString = 02-Mar-2015
java.util.Date dealDate = extractDate(dealDateString);
//here its value get converted in US format that is 03/02/2015
String dd = usOutputDate.format(dealDate);
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
// ***issue comes here as it get back converted in US format ***
java.util.Date date = format.parse(dd);
brokerInvoiceLineItem.setDealDate(new Date(date));
如上面的代码所示,String dd
中的值是 03/02/2015
但问题出在格式变量处
它的值以英国格式转换回我不想要的请告知我如何将其转换为英国格式
已转换为先前存储在 String dd
.
中的美国格式
你能试试下面的代码吗:
SimpleDateFormat ukDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat usDateFormat = new SimpleDateFormat("MMM-dd-yyyy", Locale.US);
java.util.Date dealDate = ukDateFormat.parse("02-Mar-2015");
String dateInUSFormat = usDateFormat.format(dealDate);
System.out.println(dd); // Here you have date String in US format.
Link 在 Java
中有很多关于如何使用日期转换的例子
试试这个...
try {
//parsing date format
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String dealDateString = "02-Mar-2015";
Date date = formatter.parse(dealDateString);
TimeZone tz = TimeZone.getDefault();
//converting date format for US
SimpleDateFormat sdfAmerica = new SimpleDateFormat("MM/dd/yyyy");
TimeZone tzInAmerica = TimeZone.getTimeZone("America/New_York");
sdfAmerica.setTimeZone(tzInAmerica);
String sDateInAmerica = sdfAmerica.format(date); // Convert to String first
System.out.println("Date (String) : " + sDateInAmerica);
} catch (Exception bug) {
bug.printStackTrace();
}
Ramesh Ponnada 的 by Silambarasan Poonguti and 都是正确的。但两者都已过时,使用旧的 date-time 类 与最早版本的 Java 捆绑在一起。那些 类 已被证明是麻烦、混乱和有缺陷的。
java.time
java.time framework built into Java 8 and later supplants the old java.util.Date/.Calendar classes. The new classes are inspired by the highly successful Joda-Time framework, intended as its successor, similar in concept but re-architected. Defined by JSR 310. Extended by the ThreeTen-Extra project. See the Oracle Tutorial.
LocalDate
这些新的 类 包括 LocalDate
,用于处理没有 time-of-day 和时区的 date-only 值。尽管 LocalDate 不包含时区,但请注意时区对于确定 'today' 等日期至关重要。世界各地的日期在任何时候都不相同,因为新的一天在东方黎明得更早。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;
解析字符串
要解析字符串,请指定编码模式。此模式类似于旧 java.text.SimpleTextFormat 中使用的模式,但不完全相同。所以一定要仔细研究 java.time.format.DateTimeFormatter 文档。
请注意,我们使用三元组 M
来指定我们希望使用当天名称的缩写。这是Question中解决问题的关键。
另请注意,我们指定了一个区域设置,它告诉 java.time 我们期望的缩写名称的人类语言。
String input = "02-Mar-2015";
Locale locale = Locale.US;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MMM-yyyy" ).withLocale ( locale );
LocalDate localDate = LocalDate.parse ( input , formatter );
转储到控制台。默认情况下,java.time 中的 toString
方法使用标准 ISO 8601 格式。
System.out.println ( "localDate: " + localDate );
localDate: 2015-03-02
生成字符串
在生成 date-time 值的字符串表示时,通常最好让 java.time 为您本地化它,而不是采用特定格式。 java.time.format 包有 类 用于此类工作。
注意对 withLocale
的调用。 Locale 指定了两个元素,预期格式的文化规范和用于日期和月份名称的人类语言。如果不指定区域设置,则隐式应用 JVM 当前的默认区域设置。最好是明确的,因为默认值可以随时更改。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.SHORT ).withLocale ( Locale.US );
String output = today.format ( formatter );
转储到控制台。
System.out.println ( "output: " + output );
output: 12/29/15
如果您坚持特定格式,请指定编码模式。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MM/dd/yyyy" );
String output = today.format ( formatter );
output: 12/29/2015
转化
如果您手头有 java.util.Date,请转换为 java.time。一个Instant
is a moment on the timeline in UTC.
Instant instant = myJUDate.toInstant();
指定您想要形成日期的时区,产生 ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ) ;
然后要求生成一个 LocalDate,它的值是从 ZonedDateTime 中提取的。
LocalDate localDate = zdt.toLocalDate();
我有以下代码,其中日期为字符串类型,我必须将其设置为美国格式 所以在下面我展示了它
private static final SimpleDateFormat usOutputDate = new SimpleDateFormat("MM/dd/yyyy");
在一个方法中,我编写了下面的代码,在 dealDateString
中,值是 02-Mar-2015
// dealDateString = 02-Mar-2015
java.util.Date dealDate = extractDate(dealDateString);
//here its value get converted in US format that is 03/02/2015
String dd = usOutputDate.format(dealDate);
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
// ***issue comes here as it get back converted in US format ***
java.util.Date date = format.parse(dd);
brokerInvoiceLineItem.setDealDate(new Date(date));
如上面的代码所示,String dd
中的值是 03/02/2015
但问题出在格式变量处
它的值以英国格式转换回我不想要的请告知我如何将其转换为英国格式
已转换为先前存储在 String dd
.
你能试试下面的代码吗:
SimpleDateFormat ukDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat usDateFormat = new SimpleDateFormat("MMM-dd-yyyy", Locale.US);
java.util.Date dealDate = ukDateFormat.parse("02-Mar-2015");
String dateInUSFormat = usDateFormat.format(dealDate);
System.out.println(dd); // Here you have date String in US format.
Link 在 Java
中有很多关于如何使用日期转换的例子试试这个...
try {
//parsing date format
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String dealDateString = "02-Mar-2015";
Date date = formatter.parse(dealDateString);
TimeZone tz = TimeZone.getDefault();
//converting date format for US
SimpleDateFormat sdfAmerica = new SimpleDateFormat("MM/dd/yyyy");
TimeZone tzInAmerica = TimeZone.getTimeZone("America/New_York");
sdfAmerica.setTimeZone(tzInAmerica);
String sDateInAmerica = sdfAmerica.format(date); // Convert to String first
System.out.println("Date (String) : " + sDateInAmerica);
} catch (Exception bug) {
bug.printStackTrace();
}
Ramesh Ponnada 的
java.time
java.time framework built into Java 8 and later supplants the old java.util.Date/.Calendar classes. The new classes are inspired by the highly successful Joda-Time framework, intended as its successor, similar in concept but re-architected. Defined by JSR 310. Extended by the ThreeTen-Extra project. See the Oracle Tutorial.
LocalDate
这些新的 类 包括 LocalDate
,用于处理没有 time-of-day 和时区的 date-only 值。尽管 LocalDate 不包含时区,但请注意时区对于确定 'today' 等日期至关重要。世界各地的日期在任何时候都不相同,因为新的一天在东方黎明得更早。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;
解析字符串
要解析字符串,请指定编码模式。此模式类似于旧 java.text.SimpleTextFormat 中使用的模式,但不完全相同。所以一定要仔细研究 java.time.format.DateTimeFormatter 文档。
请注意,我们使用三元组 M
来指定我们希望使用当天名称的缩写。这是Question中解决问题的关键。
另请注意,我们指定了一个区域设置,它告诉 java.time 我们期望的缩写名称的人类语言。
String input = "02-Mar-2015";
Locale locale = Locale.US;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MMM-yyyy" ).withLocale ( locale );
LocalDate localDate = LocalDate.parse ( input , formatter );
转储到控制台。默认情况下,java.time 中的 toString
方法使用标准 ISO 8601 格式。
System.out.println ( "localDate: " + localDate );
localDate: 2015-03-02
生成字符串
在生成 date-time 值的字符串表示时,通常最好让 java.time 为您本地化它,而不是采用特定格式。 java.time.format 包有 类 用于此类工作。
注意对 withLocale
的调用。 Locale 指定了两个元素,预期格式的文化规范和用于日期和月份名称的人类语言。如果不指定区域设置,则隐式应用 JVM 当前的默认区域设置。最好是明确的,因为默认值可以随时更改。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.SHORT ).withLocale ( Locale.US );
String output = today.format ( formatter );
转储到控制台。
System.out.println ( "output: " + output );
output: 12/29/15
如果您坚持特定格式,请指定编码模式。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MM/dd/yyyy" );
String output = today.format ( formatter );
output: 12/29/2015
转化
如果您手头有 java.util.Date,请转换为 java.time。一个Instant
is a moment on the timeline in UTC.
Instant instant = myJUDate.toInstant();
指定您想要形成日期的时区,产生 ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ) ;
然后要求生成一个 LocalDate,它的值是从 ZonedDateTime 中提取的。
LocalDate localDate = zdt.toLocalDate();