Pith - wedge_android
wedge_android/app/src/main/java/com/vgmlr/wedge/WedgeCalendar.kt [2.6 kb]
Modified: 23:08:23 55 026 (13 May 026)
17 Days Ago
package com.vgmlr.wedge

import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.TimeUnit

object WedgeCalendar {
    private fun getOtcParts(timestamp: Long): Pair<Long, Int> {
        val cal = Calendar.getInstance().apply { timeInMillis = timestamp }
        val gYear = cal.get(Calendar.YEAR)
        val isBeforeMarch20 = (cal.get(Calendar.MONTH) < Calendar.MARCH) ||
                (cal.get(Calendar.MONTH) == Calendar.MARCH && cal.get(Calendar.DAY_OF_MONTH) < 20)
        val cycleStartYear = if (isBeforeMarch20) gYear - 1 else gYear
        val cycleStart = Calendar.getInstance().apply {
            set(Calendar.YEAR, cycleStartYear); set(Calendar.MONTH, Calendar.MARCH)
            set(Calendar.DAY_OF_MONTH, 20); set(Calendar.HOUR_OF_DAY, 0)
            set(Calendar.MINUTE, 0); set(Calendar.SECOND, 0); set(Calendar.MILLISECOND, 0)
        }
        val altDayOfYear = TimeUnit.MILLISECONDS.toDays(timestamp - cycleStart.timeInMillis) + 1
        return Pair(altDayOfYear, cycleStartYear % 100)
    }
    fun getOtcDate(timestamp: Long = System.currentTimeMillis()): String {
        val parts = getOtcParts(timestamp)
        val time = SimpleDateFormat("HHmm", Locale.getDefault()).format(Date(timestamp))
        return "0${parts.second}${parts.first}${time}"
    }

    fun getOtcMetadata(timestamp: Long): String {
        val parts = getOtcParts(timestamp)
        val hms = SimpleDateFormat("HH:mm", Locale.US).format(Date(timestamp))
        val dmy = SimpleDateFormat("dd MMM", Locale.US).format(Date(timestamp))
        return "$hms ${parts.first} 0${parts.second} ($dmy)"
    }

    fun getDateMath(day: Int, monthAbbr: String): String? {
        val months = listOf("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")
        val monthIdx = months.indexOf(monthAbbr.lowercase())
        if (monthIdx == -1) return null
        val now = Calendar.getInstance().apply {
            set(Calendar.HOUR_OF_DAY, 0); set(Calendar.MINUTE, 0); set(Calendar.SECOND, 0); set(Calendar.MILLISECOND, 0)
        }
        val target = Calendar.getInstance().apply {
            set(Calendar.YEAR, now.get(Calendar.YEAR))
            set(Calendar.MONTH, monthIdx)
            set(Calendar.DAY_OF_MONTH, day)
            set(Calendar.HOUR_OF_DAY, 0); set(Calendar.MINUTE, 0); set(Calendar.SECOND, 0); set(Calendar.MILLISECOND, 0)
        }
        if (target.before(now)) target.add(Calendar.YEAR, 1)
        val diffUntil = TimeUnit.MILLISECONDS.toDays(target.timeInMillis - now.timeInMillis)
        val otcDay = getOtcParts(target.timeInMillis).first
        return "($otcDay)=$diffUntil"
    }
}
Updates
Shim - Android 70.026.1
Wedge - Linux 68.026.1
Wedge - Android 68.026.1
Taper - Linux 64.026.1
Ayh Extension - Chrome 63.026.1
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Shim (Dictation)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)