Duration — یہ کیا ہے، Android میں میاد کا حساب

مصنف: IT Sectr اشاعت: 2026-07-13 مطالعے کا وقت: 9 منٹ

Duration — java.time پیکیج سے ایک ناقابل تغیر کلاس جو سیکنڈ اور نینو سیکنڈ میں وقت کے دو لمحوں کے درمیان میاد کی نمائندگی کرتا ہے۔ Duration وقت پر مبنی وقت کی مقداروں — گھنٹے، منٹ، سیکنڈ، ملی سیکنڈ اور نینو سیکنڈ کو ناپتا ہے۔ Oracle Java 17 (2024) کی وضاحت کے مطابق، Period (جو سال-ماہ-دن ناپتا ہے) کے برعکس، Duration عین وقت کی اکائیوں کے ساتھ کام کرتا ہے اور کیلنڈر پر منحصر نہیں ہے۔

اہم نکات

  • Duration — سیکنڈ اور نینو سیکنڈ میں میاد ناپنے کے لیے ناقابل تغیر کلاس۔
  • Period کے برعکس، Duration وقت پر مبنی اکائیوں (گھنٹے، منٹ، سیکنڈ) کے ساتھ کام کرتا ہے، تاریخ پر مبنی (دن، ماہ، سال) پر نہیں۔
  • Duration.between(start, end)، Duration.ofMinutes()، Duration.ofHours() اور دیگر ستیٹک فیکٹری میٹہڈ کے ذریعے بنایا جاتا ہے۔
  • ریاضی کاروائی کو سپورٹ کرتا ہے: plus()، minus()، multipliedBy()، dividedBy()، negated()۔
  • Android ڈیویلپمینٹ کے لیے، Duration ٹائم آؤٹ، مطابقت کے وقفہ اور کاروائی کی میاد کا حساب لگانے کے لیے مفید ہے۔

Duration کیا ہے?

Duration ایک کلاس ہے جو سیکنڈ اور نینو سیکنڈ میں وقت کی مقدار کو موڈل کرتا ہے۔ یہ وقت پر مبنی میاد کی نمائندگی کرتا ہے، یعنی سیکنڈ کی ایک طبیعی مقدار جو کیلنڈر سے منسلک نہیں ہے۔ Duration کو «125 منٹ» یا «2 گھنٹے 5 منٹ» کے طور پر سوچا جا سکتا ہے — Period کے برعکس جو «2 ماہ» کہے گا۔

Duration کی اندرونی نمائندگی دو فیلڈز پر مشتمل ہے: long seconds (سیکنڈ) اور int nanos (نینو سیکنڈ، 0 سے 999999999 تک)۔ قیمت منفی ہو سکتی ہے — اس کا مطلب وقت میں “پیچہ” کی جانے والی میاد ہے۔ انتہائی قیمت ±31557014167219200 سیکنڈ ہے۔

Baeldung (2024) کے مطابق، Duration کاروائی کی میاد کا حساب لگانے، ٹائم آؤٹ مقرر کرنے اور کارکردگی ناپنے کے لیے ایک کلیدی کلاس ہے۔ Duration ناقابل تغیر اور تھریڈ سیف ہے، جو بغیر مطابقت کے ملٹی تھریڈ ماحول میں استعمال کی اجازت دیتا ہے۔

یہ کلاس Comparable، TemporalAmount اور TemporalUnit انٹرفیسز کو نفذ کرتا ہے۔ TemporalAmount Duration کو LocalTime، LocalDateTime، Instant اور ZonedDateTime کلاسز کے plus/minus میٹہڈز میں استعمال کرنے کی اجازت دیتا ہے۔

Duration بنام Period: فرق کیا ہے?

بنیادی فرق یہ ہے کہ Duration سیکنڈ کی عین تعداد (وقت پر مبنی) کو ناپتا ہے، جبکہ Period کیلنڈر کی اکائیوں (تاریخ پر مبنی) کو ناپتا ہے: سال، ماہ، دن۔ Duration کہتا ہے: «86400 سیکنڈ گزر چکے۔» Period کہتا ہے: «1 دن گزر چکا ہے۔» فرق ڈے لائٹ سیونگ ٹائم (DST) کی تبدیلیوں کے دوران ظاہر ہوتا ہے — Period میں 1 دن ہمیشہ 1 کیلنڈر دن ہوتا ہے، جبکہ Duration میں 86400 سیکنڈ DST کے دوران 23 یا 25 گھنٹوں کے مساوی ہو سکتے ہیں۔

Duration طبیعی وقت کی پیمائش کے لیے استعمال کی جاتی ہے: کنکشن ٹائم آؤٹ، کوئری پر عمل کا وقت، دو Instant کے درمیان وقفہ۔ Period کیلنڈر حسابوں کے لیے استعمال کی جاتی ہے: کسی شخص کی عمر (Period.between(dateOfBirth, today))، معاہدے کی میاد۔

Duration سیکنڈ اور نینو سیکنڈ کے ساتھ کام کرتا ہے، لہذا اسے حصون (گھنٹے، منٹ) میں تقسیم کیا جا سکتا ہے۔ Period سالوں، ماہوں اور دنوں کے ساتھ کام کرتا ہے — ناقابل تقسیم کیلنڈر اکائیوں۔ Oracle Java Tutorial (2024) کے مطابق، Duration اور Period کے درمیان انتخاب کام کی قسم پر منحصر کرتا ہے: عین وقت بنام کیلنڈر تاریخ۔

Duration بنانا

سب سے عام طریقہ Duration.between(Temporal start, Temporal end) ہے۔ Temporal Instant، LocalTime، LocalDateTime، ZonedDateTime — کوئی بھی قسم جو Temporal کو نفذ کرتی ہو، ہو سکتی ہے۔ یہ میٹہڈ start - end کا فرق ظاہر کرتے ہوئے ایک Duration واپس کرتا ہے (منفی ہو سکتا ہے)۔

ستیٹک فیکٹری میٹہڈ: Duration.ofSeconds(long)، ofMinutes(long)، ofHours(long)، ofDays(long)، ofMillis(long)، ofNanos(long)۔ صحیح اکائیوں کے لیے of(long amount, TemporalUnit unit) بھی ہے — ChronoUnit.HOURS، ChronoUnit.MINUTES اور دیگر۔

parse(CharSequence) میٹہڈ ISO-8601 فارمیٹ میں سٹرنگ قبول کرتا ہے: «PT1H30M» (1 گھنٹا 30 منٹ)، «PT45S» (45 سیکنڈ)، «P2DT3H» (2 دن 3 گھنٹے)۔ سٹرنگ ہمیشہ «PT» (Period of Time) سے شروع ہوتی ہے۔

kotlin
val betweenMoments = Duration.between(
    Instant.parse("2026-07-21T10:00:00Z"),
    Instant.parse("2026-07-21T14:30:00Z")
)

val fromMinutes = Duration.ofMinutes(90)
val fromHours = Duration.ofHours(2)
val parsed = Duration.parse("PT1H30M")

Duration کے ساتھ ریاضیات

Duration ریاضی کاروائی کا ایک مکمل سیٹ کو سپورٹ کرتا ہے۔ plus(Duration) اور minus(Duration) میٹہڈ ایک اور میاد کو جمع یا منفی کرتے ہیں۔ plusDays()، plusHours()، plusMinutes()، plusSeconds()، plusMillis()، plusNanos() میٹہڈ — مخصوص اکائیوں کو شامل کرنے کے لیے۔

ضرب اور تقسیم کے لیے multipliedBy(long) اور dividedBy(long) استعمال کریں۔ Duration.multipliedBy(2) میاد کو دوگنا کر دیتا ہے۔ Duration.dividedBy(3) نیچے کی طرف گول کرکے تین حصون میں تقسیم کرتا ہے۔ negated() میٹہڈ نشان کو الٹ دیتا ہے — موجب منفی ہو جاتا ہے اور اس کے برعکس۔

abs() میٹہڈ مطلق (موجب) قیمت کے ساتھ ایک Duration واپس کرتا ہے۔ isNegative() اور isZero() جانچ کے لیے ہیں۔ toDays()، toHours()، toMinutes()، toSeconds()، toMillis()، toNanos() متبادل اکائیوں میں تبدیل کرتے ہیں۔

kotlin
val oneHour = Duration.ofHours(1)
val twoHours = oneHour.plus(Duration.ofMinutes(60))
val halfHour = oneHour.dividedBy(2)

val minutes = twoHours.toMinutes()
val absDuration = (Duration.ofHours(-1)).abs()

Duration کا موازنہ

Duration Comparable انٹرفیس کو نفذ کرتا ہے، جو میادوں کا قدرتی طور پر موازنہ کرنے کی اجازت دیتا ہے۔ compareTo() میٹہڈ ایک منفی عدد، صفر یا موجب عدد واپس کرتا ہے۔ isNegative() اور isZero() تیز جانچ کے لیے ہیں۔ صریح موازنے کے لیے equals() استعمال کریں — دو Duration برابر ہیں اگر ان کے سیکنڈ اور نینو سیکنڈ مطابقت کرتے ہیں۔

چونکہ Duration منفی ہو سکتا ہے، “بڑا” یا “چہوٹا” کا موازنہ نشان کو مدنظر رکھتے ہوئے کام کرتا ہے۔ -5 منٹ 2 منٹ سے چہوٹا ہے۔ abs() میٹہڈ سمت سے آزاد “مطلقی” لمبائی کا موازنہ کرنے کے لیے مفید ہے۔

Kotlin میں، Duration آپریٹر اوورلوڈنگ کے ذریعے موازنے کے آپریٹرز کو سپورٹ کرتا ہے: a < b، a > b، a <= b۔ ساتھ ہی plus اور minus بھی آپریٹرز کے طور پر دستیاب ہیں: a + b، a - b۔

kotlin
val short = Duration.ofMinutes(5)
val long = Duration.ofMinutes(10)

if (short < long) {
    Log.d("Duration", "5 منٹ 10 سے کم ہے")
}

val negative = Duration.ofMinutes(-3)
Log.d("Duration", "منفی: ${negative.isNegative()}")

حقیقی Android کاموں میں Duration

پہلی مثال سرور کے ساتھ متوقت مطابقت کو ترتیب دینا ہے۔ Duration کو مطابقات کے درمیان وقفہ کا حساب لگانے اور بغیر اپڈیٹ کے وقت کی حد کے بڑهنے کی جانچ کے لیے استعمال کیا جاتا ہے۔

kotlin
data class SyncConfig(
    val interval: Duration = Duration.ofMinutes(15),
    val retryDelay: Duration = Duration.ofSeconds(30)
)

fun calculateNextSync(
    lastSync: Instant,
    config: SyncConfig
): Duration {
    val elapsed = Duration.between(lastSync, Instant.now())
    return config.interval.minus(elapsed)
        .coerceAtLeast(Duration.ZERO)
}

دوسری مثال کارکردگی لاگ کے لیے کاروائی کے عمل کے وقت کو ناپنا ہے۔

kotlin
fun measureExecution(
    tag: String,
    block: () -> Unit
) {
    val start = Instant.now()
    block()
    val duration = Duration.between(start, Instant.now())
    Log.d(tag, "${duration.toMillis()} ms میں عمل کیا گیا")
}

تیسری مثال ڈائمر کے باقی وقت کا حساب لگانا ہے (مثال: پروموشن کے اختتام تک الٹی گنتی)۔

kotlin
class CountdownTimer(
    private val expiresAt: Instant
) {
    fun getRemainingTime(): Duration {
        val remaining = Duration.between(
            Instant.now(), expiresAt
        )
        return remaining.coerceAtLeast(Duration.ZERO)
    }

    fun isExpired(): Boolean = getRemainingTime() == Duration.ZERO
}

Duration کو سٹرنگ میں تبدیل کرنا

toString() میٹہڈ Duration کو ISO-8601 فارمیٹ میں واپس کرتا ہے: «PT1H30M» (1 گھنٹا 30 منٹ)، «PT45.5S» (45.5 سیکنڈ)۔ یہ فارمیٹ مشینوں کے درمیان تبادلے کے لیے سهول ہے لیکن صارف کو دکھانے کے لیے نہیں۔

انسانی مطالعے کے قابل فارمیٹ کے لیے، toDays()، toHours()، toMinutes()، toSeconds() استعمال کریں اور پھر سے سٹرنگ بنائیں۔ مثال: «${days} دن ${hours} گھ ${minutes} منٹ»۔ یاد رکھیں کہ toHours() کل گھنٹوں کی تعداد واپس کرتا ہے، دن کے اندر گھنٹے نہیں۔

Duration کو اجزاء میں تقسیم کرنے کے لیے فارمولا استعمال کریں: val hours = duration.toHours(); val minutes = duration.toMinutes() % 60; val seconds = duration.seconds % 60۔ Apache Commons Lang (2024) کے مطابق، DurationFormatUtils لائبریری اضافی فارمیٹنگ کی صلاحیتیں فراہم کرتی ہے۔

kotlin
fun formatDuration(duration: Duration): String {
    val hours = duration.toHours()
    val minutes = duration.toMinutes() % 60
    val seconds = duration.seconds % 60

    return buildString {
        if (hours > 0) append("${hours} h ")
        if (minutes > 0) append("${minutes} min ")
        append("${seconds} sec")
    }
}

عام غلطیاں

پہلی غلطی تاریخوں کے ساتھ کام کرتے وقت Duration اور Period میں الجھاد کرنا ہے۔ Duration سیکنڈ ناپتا ہے، لہذا Duration.ofDays(1) ہمیشہ 24 گھنٹے (86400 سیکنڈ) ہۋتا ہے، ڈے لائٹ سیونگ ٹائم سے آزاد۔ اگر آپ کو ایک کیلنڈر دن چاہیے تو Period.ofDays(1) استعمال کریں۔

دوسری غلطی تبدیل کے دوران نینو سیکنڈ کو کھونا ہے۔ Duration نینو سیکنڈ کو ذخیرۙ کر سکتا ہے، لیکن toMillis() اور toSeconds() انہیں ضائع کر دیتے ہیں۔ عین حسابوں کے لیے toNanos() استعمال کریں یا بغیر تبدیل کے براہراست Duration کے ساتھ کام کریں۔

تیسری غلطی منفی Duration کو نظرانداز کرنا ہے۔ Duration.between(start, end) start - end واپس کرتا ہے۔ اگر start end کے بعد ہے تو Duration منفی ہو گا۔ abs() مطلق قیمت حاصل کرنے میں مدد کرتا ہے اور isNegative() ارگمنٹ کی ترتیب چیک کرتا ہے۔

چوتھی غلطی یوزر انٹرفیس کے لیے غلط Duration فارمیٹنگ ہے۔ Duration.toString() ISO-8601 واپس کرتا ہے جو قابل مطالعہ نہیں ہے۔ صارف کو دکھانے کے لیے toHours()، toMinutes() اور toSeconds() کا استعمال کرکے مناسب تقسیم کے باقی کے ساتھ Duration کو همیشہ دستی طور پر فارمیٹ کریں۔

اکثر پوچہ جانے والے سوالات

کیا Duration منفی ہو سکتا ہے?

جی ہاں، Duration منفی ہو سکتا ہے۔ Duration.between(start, end) start - end واپس کرتا ہے۔ اگر start end کے بعد ہے تو Duration منفی ہو گا۔ مطلق قیمت کے لیے abs() یا جانچ کے لیے isNegative() استعمال کریں۔

دو Duration کو کیسے جمع کریں?

plus(Duration) میٹہڈ یا Kotlin میں + آپریٹر استعمال کریں: duration1 + duration2۔ نتیجہ ایک نیا Duration ہے۔ minus(Duration) میٹہڈ ایک میاد کو دوسری سے منفی کرتا ہے۔ تمام کاروائیاں ناقابل تغیر ہوتی ہیں اور ایک نیا آبجیکٹ واپس کرتی ہیں۔

Duration.ofDays(1) Period.ofDays(1) سے کیسے مختلف ہے?

Duration.ofDays(1) ہمیشہ 24 گھنٹے (86400 سیکنڈ) ہۋتا ہے۔ Period.ofDays(1) 1 کیلنڈر دن ہے جو DST کے دوران 23 یا 25 گھنٹے ہو سکتا ہے۔ عین وقت کے حسابوں کے لیے Duration استعمال کریں، کیلنڈر حسابوں کے لیے Period۔

Duration کو ملی سیکنڈ میں کیسے تبدیل کریں?

toMillis() میٹہڈ استعمال کریں۔ یہ ایک long واپس کرتا ہے — Duration میں ملی سیکنڈ کی تعداد۔ نینو سیکنڈ کے لیے toNanos() استعمال کریں۔ انتباہ: toNanos() > 292 سال کی قیمتوں پر long کو اوربھاو کر سکتا ہے۔ بڑی Duration کے لیے toSeconds() یا toMinutes() استعمال کریں۔

دو LocalTime کے درمیان Duration کا حساب کیسے لگایں?

Duration.between(startTime, endTime) استعمال کریں۔ اگر endTime startTime سے چہوٹا ہے (رات کی شفٹ)، تو Duration منفی ہو گا۔ 24 گھنٹے شامل کریں: duration.plusHours(24)، اگر endTime اگلے دن کو مانا جاتا ہے۔

خلاصہ

  • Duration — نینو سیکنڈ دروستی کے ساتھ وقت پر مبنی میاد کے لیے ناقابل تغیر کلاس، وقفہ ناپنے کے لیے موزوں ہے۔
  • Period سے بنیادی فرق — Duration سیکنڈ (طبیعی وقت)، Period کیلنڈر اکائیوں کو ناپتا ہے۔
  • Duration.between() سے لمحوں کے درمیان فرق کے لیے یا ofMinutes، ofHours، ofDays کے ستیٹک فیکٹریوں سے بنایا جاتا ہے۔
  • ریاضیات کو سپورٹ کرتا ہے: plus، minus، multipliedBy، dividedBy، اور Comparable اور abs کے ذریعے موازنہ۔
  • Android میں Duration کو ٹائم آؤٹ، مطابقت کے وقفۙ، ٹائمرز اور کارکردگی کی پیمائش کے لیے استعمال کیا جاتا ہے۔
  • صارف کو دکھاتے وقت Duration کو دستی فارمیٹ کریں — toString() ISO-8601 آؤٹپٹ کرتا ہے جو انسانی مطالعے کے قابل نہیں ہے۔
  • یاد رکھیں کہ Duration منفی ہو سکتا ہے — isNegative() چیک کریں اور درست حساب کے لیے abs() استعمال کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں