使用Java 8的新日期时间库,将字符串解析为日期的方法是使用DateTimeFormatter.LocalDate,LocalTime并且LocalDateTime都有一个静态解析方法,它接受一个String和一个格式化程序.一个潜在的问题是,如果你的DateTimeFormat不包含时间部分(或者对于DateTime,一个日期部分),即使你的模式匹配,你最终也会得到一个解析错误.
例
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-DD");
LocalDateTime dt = LocalDateTime.parse("2016-01-11", formatter);
Run Code Online (Sandbox Code Playgroud)
这将引发DateTimeParseException(如讨论这里与消息)
java.time.format.DateTimeParseException:
Text '2016-01-11' could not be parsed:
Unable to obtain LocalDateTime from TemporalAccessor
Run Code Online (Sandbox Code Playgroud)
这是一个有点无用的错误消息,因为文本可以解析,因为它匹配模式.相反,错误与它无法创建LocalDateTime的时间部分这一事实有关.将代码重构为以下代码:
LocalDateTime ldt = LocalDate.parse("2016-01-11", formatter).atStartOfDay());
Run Code Online (Sandbox Code Playgroud)
我的问题是,你说你有这样的通用方法
public static LocalDateTime getDate(String s, DateTimeFormatter format) {
...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确定需要调用哪个静态解析方法,通过应用一些默认逻辑将字符串强制转换为LocalDateTime?例如,如果日期仅使用午夜,如果时间仅使用今天,等等.
我正在尝试使用公平调度启动一个 emr 集群,以便我可以并行运行多个步骤。我看到这可以通过管道(https://aws.amazon.com/about-aws/whats-new/2015/06/run-parallel-hadoop-jobs-on-your-amazon-emr-cluster-using -aws-data-pipeline/),但我已经通过调用 awscli[1] 的气流作业实现了集群管理/自动化创建,因此只需更新我的配置就太好了。
aws emr create-cluster \
--applications Name=Spark Name=Ganglia \
--ec2-attributes "${EC2_PROPERTIES}" \
--service-role EMR_DefaultRole \
--release-label emr-5.8.0 \
--log-uri ${S3_LOGS} \
--enable-debugging \
--name ${CLUSTER_NAME} \
--region us-east-1 \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m3.xlarge)
Run Code Online (Sandbox Code Playgroud)
我认为它可以使用 --configurations ( https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html ) 标志来实现,但不确定正确的 env 名称