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