使用Camel的表达式语言获取并格式化昨天的日期

Cha*_*ton 11 apache-camel

我在Camel的路径中使用日期:

fileName=${date:now:dd-MM-yyyy}
Run Code Online (Sandbox Code Playgroud)

但我现在需要的是 - 1天.那可能吗?

Pet*_*der 13

好吧,不是直接的.日期:简单语言中的对象只能获取当前时间(或者您在标题中放置的某个时间值 - 您可以在java或类似文件中执行此操作).

但你也可以这样做.创建一个类:

public class YesterdayBean{
    public String getYesterday(){
        Calendar cal = Calendar.getInstance();
        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        cal.add(Calendar.DATE, -1); 
        return dateFormat.format(cal.getTime());  
    }
}
Run Code Online (Sandbox Code Playgroud)

将它连接到您的Camel(或弹簧,如果您使用它)注册表作为bean.如果您不确定如何执行此操作,请查找注册表bean的"using"部分.

假设您使用spring命名注册表中的bean"昨天":

<bean id="yesterday" class="some.package.YesterdayBean"/>
Run Code Online (Sandbox Code Playgroud)

然后将它与文件组件一起使用.

.to("file:fo/bar?fileName=${bean:yesterday}")
Run Code Online (Sandbox Code Playgroud)

如果这只是您需要它的一个地方,并且您正在使用Java DSL,您还可以使用Java处理器预先创建日期并将其放在标题中.

像这样:

from("file:somewhere")
        .process(new Processor(){
            public void process(Exchange ex){
                Calendar cal = Calendar.getInstance();
                cal.add(Calendar.DATE, -1); 
                ex.getIn().setHeader("yesterday",cal.getTime());
            }
        })
       .to("file:target?fileName=${date:header.yesterday:dd-MM-yyyy}");
}
Run Code Online (Sandbox Code Playgroud)


Alb*_*tti 6

Camel简单语言date变量支持带偏移量的命令:

支持的命令有:now对于当前时间戳, [...] 命令接受偏移量,例如:now-24hheader.xxx+1h甚至now+1h30m-100

所以你可以将你的作业写成:

fileName=${date:now-1d:dd-MM-yyyy}
Run Code Online (Sandbox Code Playgroud)

请注意,这甚至-1d等于-24h文档中未提及的内容。