التكرار على الطابع الزمني (التاريخ والساعة)

1

لدي بعض الوظائف التي تحصل عليها كطابع وقت بدء محدد وخاتم نهاية محدد (على سبيل المثال "2018-01-01 16:00:00" و "2018-01-01 17:00:00" ) (في بداية الكود i import java.sql.Timestamp )

أريد تكرار هذه الوظيفة بمرور الوقت (على سبيل المثال - بين 2018-01-01 حتى 2018-01-10 ، كل ساعة على حدة). أبعد ما حصلت عليه حتى الآن كان يتكرر على مر التاريخ ، باستخدام import java.time.{LocalDate, Period} ولكن عندما حاولت تغيير الرمز الخاص بي إلى import java.time.{LocalDateTime, Period} ، لم تنجح:

import java.time.temporal.ChronoUnit 
import java.time.temporal.ChronoField.HOUR_OF_DAY 
import java.time.{LocalDateTime, Period} 

val start = LocalDateTime.of(2018, 1, 1,6,20) 
val end = LocalDateTime.of(2018, 1, 11,6,30) 
val dates: IndexedSeq[LocalDateTime] = 
  (0L to (end.toEpochSecond() - start.toEpochSecond())).map(hours => 
    start.plusHours(hours)
  )
dates.foreach(println)

سوف نقدر مساعدتك!

4 الاجابة

1
افضل جواب

يمكنك الاستفادة من كل من تدفقات سكالا وواجهة برمجة تطبيقات localdatetime لجعل الأمور أسهل مما حاولت ، وهذا دعنا نقول ، مستوى منخفض جدًا ^^!

val allDatesBeforeEnd = Stream.iterate(start)(_.plusHours(1)).takeWhile(_.isBefore(end)).toList
:مؤلف
0

يمكنك أولاً الحصول على عدد الساعات بين فترتي التاريخ ثم التكرار فوق النطاق الذي شكله هذا العدد من الساعات لإنشاء نطاق أوقات التاريخ:

val allDatesBeforeEnd =
  (0L until ChronoUnit.HOURS.between(start, end)).map(start.plusHours(_))

على الرغم من أنني أفضل قراءة حل C4stor ، إلا أن هذا الحل قد يكون أفضل قليلاً من حيث الأداء لأنه لا يؤدي takeWhileisBefore تحقق من كل تكرار.

:مؤلف
0
import java.time.{LocalDateTime, Period}

val start = LocalDateTime.of(2018, 1, 1,6,20) 
val end = LocalDateTime.of(2018, 1, 11,6,30) 

val periodInHours = Period.between(start.toLocalDate(), end.toLocalDate()).getDays*24       
val dates: IndexedSeq[LocalDateTime] = (0L to periodInHours).map(start.plusHours(_))
dates.foreach(println)
:مؤلف
-1
افضل جواب

جرب هذا ، فهو يطبع كل الساعات بين الأمس واليوم ، فقط قم بتكييفه باستخدام حالة:

  val yesterday =  LocalDateTime.now().minusDays(1)
  val today =  LocalDateTime.now()

  Stream.iterate(yesterday){
    h => h.plusHours(1)
  }.takeWhile(_.isBefore(today)).foreach(println(_))
:مؤلف
فوق
قائمة طعام