繁体   English   中英

从String中检索年,月,日,小时,秒和时区并转换为DateTime

[英]Retrieve year, month, day, hour, second and timezone from a String and convert to DateTime

我想使用具有此格式的字符串yyyyMMddHHmmss + timezone获取DateTime对象,

举个例子:

20131216014500 + 0000

看起来我可以使用DateTimeFormatter,但我真的不知道如何,然后我使用正则表达式来创建DateTime对象。 为此,我使用这个:

Pattern.compile("([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])\\+([0-9][0-9][0-9][0-9])");
Matcher m = p.matcher(timestamp);
String match = m.group();
int year = Integer.parseInt(m.group(0));
int monthOfYear = Integer.parseInt(m.group(1));
int dayOfMonth = Integer.parseInt(m.group(2));
int hourOfDay = Integer.parseInt(m.group(3));
int minuteOfHour = Integer.parseInt(m.group(4));
int secondOfMinute = Integer.parseInt(m.group(5));
// TimeZone tz = TimeZone.getTimeZone("");
DateTime date = new DateTime(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute);

这里我有两个问题,一个是我不知道如何设置TimeZone。

第二个是运行这个我得到java.lang.IllegalStateException。

有帮助吗?

一些使用Joda-Time 2.3的示例代码。

与java.util.Date不同,Joda-Time DateTime知道自己的时区。 如果你希望(电话您可以通过在格式定义中指定的时区withZone )。 或者,您可以通过调用toDateTime并传递DateTimeZone实例来创建设置为区域的新DateTime实例,如下所示。

String string = "20131216014500+0000";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMddHHmmssZ");
DateTime dateTime = formatter.parseDateTime( string ); // Default time zone.

// Shift time zone to UTC/GMT.
DateTime dateTimeUtc = dateTime.toDateTime( DateTimeZone.UTC );

// Shift time zone to a named time zone.
// Guessing that "Europe/Madrid" is appropriate for Málaga Spain.
DateTime dateTimeMálaga = dateTime.toDateTime( DateTimeZone.forID( "Europe/Madrid" ) );

转储到控制台......

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeMálaga: " + dateTimeMálaga );

跑的时候......

dateTime: 2013-12-15T17:45:00.000-08:00
dateTimeUtc: 2013-12-16T01:45:00.000Z
dateTimeMálaga: 2013-12-16T02:45:00.000+01:00

正则表达式不是去这里的方式。 有一些java库已经解决了这个问题。 请参阅SimpleDateFormat

y   Year
M   Month
d   day
H   hour
m   minute
s   second
Z   timezone (RFC 822) 

这可能应该这样做:

DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssZ");
Date result =  df.parse(yourString);  
DateTime dateTime = new DateTime(result); //to get a joda DateTime object

编辑:JodaTime有一个类似的类。

模式语法主要与java.text.SimpleDateFormat兼容

 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMddHHmmssZ");
 DateTime dt = fmt.parseDateTime(yourString);

请参见DateTimeFormatDateTimeFormatter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM