【问题标题】:How to convert a specific time to milliseconds [duplicate]如何将特定时间转换为毫秒 [重复]
【发布时间】:2018-07-06 04:39:58
【问题描述】:

如何转换一个特定的小时,例如18:00,到毫秒?

我需要这个,以便如果它在例如 12:00 和 18:00 之间我可以做某事,如果不是在 12:00 和 18:00 之间我可以做其他事情。

我得到当前时间:

Private long time;
time = System.currentTimeMillis();

但我不知道如何将一小时转换为毫秒。

我在互联网上搜索,似乎如果我使用System.currentTimeMillis(),它会给我当前日期和时间的毫秒,但我需要它每天更新如下:

今天以毫秒为单位的时间是这样的:1516994140294。但是这个号码包含这个:Fri Jan 26 2018 19:15:40。因此,如果我在今天的 12:00 和 18:00 使用millis,这意味着明天它将无法按我的意愿工作。

那么您能帮我提供一个示例或文档吗?一切都可以帮助我:)并提前感谢。

【问题讨论】:

    标签: java android time milliseconds


    【解决方案1】:

    tl;博士

    LocalTime.now()                               // Capture current moment. Better to explicitly pass a `ZoneId` object than rely implicitly on the JVM’s current default time zone.
             .isBefore( LocalTime.of( 18 , 0 ) )  // Compare the current time-of-day against the limit.
    

    无需毫秒计数

    无需计算毫秒数。 Java 为这项工作提供了智能日期时间类,可以在 Java 8 及更高版本中内置的 java.time 包中找到。对于早期的 Android,请参阅下面的最后一个项目符号。

    不需要System.currentTimeMillis()。 java.time 类做同样的工作。

    LocalTime

    要获取当前时间,不带日期和时区,请使用LocalTime

    确定当前时间需要时区。对于任何给定的时刻,一天中的时间因区域而异。如果省略,则隐式应用 JVM 的当前默认时区。最好明确指定您想要/预期的时区,因为默认值可能会在运行前或运行时随时更改。

    continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。

    ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
    LocalTime now = LocalTime.now( z ) ;
    

    与方法isBeforeisAfterequals 进行比较。

    询问“等于或晚于中午”的更简短的方式是“不早于中午”。

    boolean isAfternoon = 
        ( ! now.isBefore( LocalTime.NOON ) ) 
        && 
        now.isBefore( LocalTime.of( 18 , 0 ) )
    ;
    

    如果您担心Daylight Saving Time( DST) 等异常的影响,请探索使用ZonedDateTime 而不是仅仅使用LocalTime


    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    从哪里获得 java.time 类?

    【讨论】:

      【解决方案2】:
      1. 用“:”分隔符分割当前时间。第一个是小时,第二个是分钟,第三个是秒。
      2. 将小时转换为分钟。即 18*60。
      3. 在这种情况下,将上述答案添加到当前分钟 (18*60 + 00)。
      4. 将上述答案乘以 60 秒 ((18*60 + 00)*60)。
      5. 同样,在这种情况下,采用上述方法,并添加您的秒数 ((18*60 + 00)*60 + 00)。
      6. 再次,取上面的值,乘以 1000 毫秒 (((18*60 + 00)*60 + 00)*1000)。

      Viola,您的时间以毫秒为单位。

      【讨论】:

      • 是的,但如果我采用当前时间,它会给一天,所以在我的情况下,它不会像我想要的那样工作
      • 我在回答How can I convert one specific hour, e.g. 18:00, to milliseconds?
      • 另外,如果要获取当天的时间(不包括日期),请使用long time = System.currentTimeMillis() - new DateTime().millisOfDay().getMillis;
      【解决方案3】:

      你应该看看 SimpleDateFormat

      有一个很好的教程here

      要比较两个“日期”,您应该查看如何创建Calendar(或更简化但已弃用的Date)对象。它实现了可比较,因此您可以将当前时间转换为 Date 对象并将其与已知时间戳进行比较(如您的问题中):

      杰夫Calendar 爪哇Date

      您可以将CalendarDate 都设置为特定时间或当前时间。例如Calendar.setCurrentTimeMillis(System.currentTimeMillis()) 将获得一个Calendar 实例设置当前时间(就像Calendar.getInstance())。

      这是Date 的示例:

          // This is how to get today's date in Java
          Date today = new Date();
      
          //If you print Date, you will get un formatted output
          System.out.println("Today is : " + today);
      
          //formatting date in Java using SimpleDateFormat
          SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
          String date = DATE_FORMAT.format(today);
          System.out.println("Today in dd-MM-yyyy format : " + date);
      
          //Another Example of formatting Date in Java using SimpleDateFormat
          DATE_FORMAT = new SimpleDateFormat("dd/MM/yy");
          date = DATE_FORMAT.format(today);
          System.out.println("Today in dd/MM/yy pattern : " + date);
      
          //formatting Date with time information
          DATE_FORMAT = new SimpleDateFormat("dd-MM-yy:HH:mm:SS");
          date = DATE_FORMAT.format(today);
          System.out.println("Today in dd-MM-yy:HH:mm:SS : " + date);
      
          //SimpleDateFormat example - Date with timezone information
          DATE_FORMAT = new SimpleDateFormat("dd-MM-yy:HH:mm:SS Z");
          date = DATE_FORMAT.format(today);
          System.out.println("Today in dd-MM-yy:HH:mm:SSZ : " + date);
      

      来自这个网站:http://www.java67.com/2013/01/how-to-format-date-in-java-simpledateformat-example.html#ixzz55Jw9BaXW

      【讨论】:

      • 是的,但我需要比较 2 个日期。如果我将它们更改为字符串并进行比较,它会起作用吗?
      • 你的问题的标题没有提到比较 - 但我已经编辑了我的答案,以帮助更清楚地说明如何使用日期和日历进行比较,就像你问的那样
      • 要比较两个日期,只需减去它们的长度,您将获得以毫秒为单位的时间差异
      • 谢谢,但我不需要日历我有 2 个间隔 12:00 -18:00 白天和 18:00-12:00(第二天)晚上......因为我蚂蚁那只母鸡是晚上,我希望我的应用程序具有夜间风格,以及早上何时具有早晨风格:)
      • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 和 Java 中内置的 java.time 类所取代9. 见Tutorial by Oracle
      猜你喜欢
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多