2023-06-01

【Kotlin】計算起、迄時刻所經歷的時間

app 層級 build.gradle

  1.  
  2. android {
  3. ...
  4. ...
  5. buildFeatures {
  6. viewBinding true
  7. }
  8. }
  9.  



activity_main.xml
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <androidx.constraintlayout.widget.ConstraintLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. xmlns:tools="http://schemas.android.com/tools"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. tools:context=".MainActivity">
  10.  
  11. <TextView
  12. android:id="@+id/txtHello"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="Hello World!"
  16. app:layout_constraintBottom_toBottomOf="parent"
  17. app:layout_constraintEnd_toEndOf="parent"
  18. app:layout_constraintStart_toStartOf="parent"
  19. app:layout_constraintTop_toTopOf="parent"
  20. android:onClick="timeDuration"
  21. />
  22.  
  23. </androidx.constraintlayout.widget.ConstraintLayout>
  24.  



MainActivity.kt
  1.  
  2. package 完整package
  3.  
  4. import androidx.appcompat.app.AppCompatActivity
  5. import android.os.Bundle
  6. import android.os.SystemClock
  7. import android.view.View
  8. import com.example.timeduration.databinding.ActivityMainBinding
  9. import java.util.Date
  10.  
  11.  
  12. class MainActivity : AppCompatActivity() {
  13. private lateinit var binding: ActivityMainBinding
  14.  
  15. override fun onCreate(savedInstanceState: Bundle?) {
  16. super.onCreate(savedInstanceState)
  17. binding = ActivityMainBinding.inflate(layoutInflater)
  18. val view = binding.root
  19. setContentView(view)
  20. }
  21.  
  22. fun timeDuration(vv: View) {
  23. // 狀況 1: 變數型態為 Date 類別
  24. val a1 = Date()
  25. SystemClock.sleep(123)
  26. val a2 = Date()
  27.  
  28. // 狀況 2: 變數型態為字串, 則轉換為 Date 類別
  29. /*
  30. val pattern = "yyyy.MM.dd HH:mm:ss.SSS"
  31. val formatter = SimpleDateFormat(pattern, Locale.getDefault())
  32. val a1 = formatter.parse("2023.05.01 00:00:00.000")
  33. val a2 = formatter.parse("2023.05.01 01:10:11.123")
  34. */
  35.  
  36. val durationMillis = a2.time - a1.time
  37.  
  38. // 精確度達 0.001 秒
  39. val hours = durationMillis / (1000 * 60 * 60)
  40. val minutes = durationMillis % (1000 * 60 * 60) / (1000 * 60)
  41. val seconds = durationMillis % (1000 * 60) / 1000
  42. val millis = durationMillis % 1000
  43.  
  44. // 輸出格式為 時:分:秒.毫秒
  45. val sDuration = String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, millis)
  46. binding.txtHello.text = sDuration
  47. }
  48. }
  49.  



沒有留言:

張貼留言