根据白天节约时间小时创建日志文件名

时间:2015-04-22 09:39:14

标签: java calendar logfile

我正在开展一个项目。该应用程序节省了一天的时间。

应用程序在运行时每小时创建一个日志文件,例如

public static void main(String[] args) throws Exception {

  String fileName = args[0];
  System.out.println("----->Filename : "+fileName);        

  Long now = new Date().getTime();

  SparkConf conf = new SparkConf(true)
           .setMaster("local")
           .setAppName("JavaSparkSQL_" +now)
           .set("spark.executor.memory", "1g")
           .set("spark.cassandra.connection.host", "192.168.1.65")
           .set("spark.cassandra.connection.native.port", "9042")
           .set("spark.cassandra.connection.rpc.port", "9160");

  JavaSparkContext ctx = new JavaSparkContext(conf);

  JavaRDD<String> input =  ctx.textFile("hdfs://abc.xyz.net:9000/dataLoad/resources/" + fileName,6);
  JavaRDD<DataInput> result = input.mapPartitions(new ParseJson()).filter(new FilterLogic());

  System.out.print("Count --> "+result.count());
  System.out.println(StringUtils.join(result.collect(), ","));

  javaFunctions(result).writerBuilder("ks","pt_DataInput",mapToRow(DataInput.class)).saveToCassandra();

}

这里20150422是日期,06是记录的小时。

冬天的时间变化,有两个时间凌晨2点 - 你知道我的意思。

我想通过分配后缀来为这两个不同的小时制作两个不同的文件,例如:

2015042206_someName.log

我想到的一个解决方案:

以某种方式(我不知道如何)从日历中获得'上一个小时'并看到'HOUR_OF_DAY'和'PREVIOUS HOUR'之间的差异。如果差异为零,则时间已更改,因此请添加后缀。

在这种情况下,我不知道如何获得前一个小时 - 特别是如果应用程序在前一个小时内没有运行。

任何人都能想到的任何其他解决方案???

非常感谢任何帮助。提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以简单地检查一下,看看具有该名称的文件是否已存在。万一它,你可以添加&#34; A&#34;或&#34; B&#34;按照你的意愿。

答案 1 :(得分:1)

恕我直言,你太过复杂了。解决此问题的最佳方法是通过制作时间戳UTC来避免夏令时问题。这样你就永远不会遇到DST问题,而且你不必进行复杂且容易出错的更改。

是的,如果阅读文件名的人没有意识到它不在当地时间,那么可能会让人感到困惑,但你总是可以附加&#34; UTC&#34;在文件名中,如果它确实是一个问题,例如:

2015042202_UTC_someName.log

答案 2 :(得分:0)

最简单的方法是使用SimpleDateFormat("yyyyMMddhhX")