开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink日期减去24小时 怎么实现?需要保留时分秒

Flink日期减去24小时 怎么实现?需要保留时分秒

展开
收起
三分钟热度的鱼 2023-12-06 19:19:15 48 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看

    在Flink中,可以使用DateTime类和TimeUnit枚举来实现日期减去24小时的操作。以下是一个示例:

    import org.apache.flink.api.common.functions.MapFunction;
    import org.apache.flink.streaming.api.datastream.DataStream;
    import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
    import org.apache.flink.streaming.api.windowing.time.Time;
    import org.apache.flink.util.Collector;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.concurrent.TimeUnit;
    
    public class FlinkSubtract24Hours {
        public static void main(String[] args) throws Exception {
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
            DataStream<String> input = env.fromElements("2022-01-01 12:00:00");
    
            DataStream<String> output = input.map(new MapFunction<String, String>() {
                @Override
                public String map(String value) throws Exception {
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                    LocalDateTime dateTime = LocalDateTime.parse(value, formatter);
                    LocalDateTime newDateTime = dateTime.minus(1, TimeUnit.HOURS);
                    return newDateTime.format(formatter);
                }
            });
    
            output.print();
    
            env.execute("Flink Subtract 24 Hours");
        }
    }
    

    在这个示例中,我们首先创建了一个StreamExecutionEnvironment,然后从输入数据流中读取一个字符串值。接下来,我们使用map函数将字符串值转换为LocalDateTime对象,然后使用minus方法减去24小时。最后,我们将结果转换回字符串并输出。

    2023-12-06 21:31:53
    赞同 展开评论 打赏
  • TIMESTAMPADD(HOUR, -24, ts) 这个试试呢。此回答整理自钉群“实时计算Flink产品交流群”

    2023-12-06 20:21:05
    赞同 展开评论 打赏
  • 在Apache Flink中,你可以使用内置的时间函数和算术运算符来实现日期减去24小时。这里有一个示例,展示了如何使用Flink SQL进行这个操作:

    -- 假设我们有一个名为orders的表,其中包含一个名为order_time的TIMESTAMP类型列
    
    -- 减去24小时,并保留时分秒
    SELECT order_time - INTERVAL '1' DAY AS new_order_time
    FROM orders;
    

    在这个例子中,我们使用了INTERVAL '1' DAY来表示24小时的时间间隔。这将从order_time列中减去24小时,同时保留原始的时分秒。

    请注意,Flink中的时间处理可能依赖于底层数据库或数据源对时间戳的支持。在某些情况下,你可能需要根据具体的数据源和环境调整你的查询。

    如果你正在使用的是其他类型的日期格式(如字符串),那么你可能需要先将它们转换为TIMESTAMP类型,然后再执行减法操作。例如,如果你的日期是以"yyyy-MM-dd HH:mm:ss"格式存储的字符串,可以使用以下查询:

    -- 假设我们有一个名为orders的表,其中包含一个名为order_time的VARCHAR类型列
    
    -- 将字符串转换为TIMESTAMP,然后减去24小时
    SELECT TO_TIMESTAMP(order_time, 'yyyy-MM-dd HH:mm:ss') - INTERVAL '1' DAY AS new_order_time
    FROM orders;
    
    2023-12-06 20:09:09
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载