参数化ZonedDateTime方法

时间:2017-08-19 14:02:18

标签: java design-patterns modularity

我有一个参数化方法:

private static Date getTimeFor(int hour, int minute, int second, int nanoSecond, String zoneId) {
    ZonedDateTime time = ZonedDateTime.now()
            .withZoneSameLocal(ZoneId.of(zoneId))
            .withHour(hour)
            .withMinute(minute)
            .withSecond(second)
            .withNano(nanoSecond);
    return Date.from(time.toInstant());
}

其次是:

    private Date getRomeStartTime(){
        return getTimeFor(8,30,0,0,"Europe/Rome");
    }

    private Date getParisStartTime(){
        return getTimeFor(9,30,0,0,"Europe/Paris");
    }

    private Date getLondonStartTime(){
        return getTimeFor(9,00,0,0,"Europe/London");
    }

随着更多城市的增加,这可能会很快失控。我的目标是只公开/暴露下面的方法并将StartTimes的构建委托给别处:

public Date getEffectiveTimeFor(String zoneId){
        // Delegate construction as per zoneId elsewhere
        // dont want to use a long-winded if-else statement
    }

我无法使用策略模式,因为我不应该传递一个对象,而只是一个字符串。 这里最好的方法是什么?

(p.s。我返回旧的Date,这是不可能的)

1 个答案:

答案 0 :(得分:1)

您只需使用Map<String, LocalTime>存储每个区域ID的开始时间即可。然后在方法中从此贴图中获取开始时间,并从那里创建日期。