import org.joda.time.DateTime;
public static void main(String[] args) {
DateTimeFormatter f = DateTimeFormat.forPattern("dd MMM yyyy");
f = f.withLocale(Locale.US);
f.parseDateTime("13 januari 2016");
DateTime date = new DateTime(f);
date.getDayOfYear();
}
月份是荷兰语,而不是英语。
输出:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "13 januari 2016" is malformed at "uari 2016"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
at com.company.Main.main(Main.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
如何正确初始化这个Joda DateTime? 非常感谢你们!
答案 0 :(得分:1)
为您期望的语言检索相应的Locale
。使用它来构造具有适当模式的DateTimeFormat
。然后解析你的日期字符串。
例如
Locale dutch = Locale.forLanguageTag("nl-nl");
DateTimeFormatter f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(dutch);
DateTime date = f.parseDateTime("13 januari 2016");
我不知道你在尝试做什么
DateTime date = new DateTime(f);
DateTime
构造函数需要Object
表示即时。
已识别的对象类型在
ConverterManager
和ReadableInstant
中定义 包括String
,Calendar
,Date
和String
。ISODateTimeFormat.dateTimeParser()
格式由DateTimeFormat
描述。
CONFIG
# default settings for sessions
[DEFAULT]
FileStorePath=D:\Production\LOGS\Hs_storeDROP
FileLogPath=D:\Production\LOGS\Hs_logDROP
ConnectionType=initiator
ReconnectInterval=1
SenderCompID=fixclient
# session definition
[SESSION]
# inherit FileStorePath, FileLogPath, ConnectionType, ReconnectInterval and SenderCompID from default
BeginString=FIX.4.2
TargetCompID=FIX-E-FEED
StartTime=01:00:00
EndTime=23:59:00
HeartBtInt=20
SocketConnectPort=xxxx
SocketConnectHost=xxxx
DataDictionary=D:\Production\FIX\HS_FIX42.xml
ValidateUserDefinedFields=N
ValidateFieldsHaveValues=N
UseDataDictionary=Y
ResetOnLogon=N
ResetSeqNumFlag=N
EncryptMethod=0
不是这些。
答案 1 :(得分:1)
Answer by Sotirios Delimanolis是正确的。但请注意,Joda-Time项目现在处于维护模式,其团队建议迁移到java.time类。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
解析字符串时,请指定Locale
以确定:
您可以让java.time自动进行本地化,而不是明确指定格式化模式。要进行本地化,请指定FormatStyle
以确定字符串的长度或缩写。
String input = "13 januari 2016";
Locale l = new Locale ( "nl", "NL" ); // Dutch language, Netherlands country.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ).withLocale ( l );
LocalDate ld = LocalDate.parse ( input, f );
转储到控制台。
System.out.println ( "input: " + input );
System.out.println ( "ld.toString(): " + ld );
输入:2016年januari
ld.toString():2016-01-13
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。