8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Kotlin 上的 RecyclerView 一周的日期和月份

Andrey 2月前

149 0

我想实现一个 RecyclerView,显示一周的日期和月份,包括当前日期。并且它需要可滚动,当前日期应位于中心。我明白我需要

我想实现一个 RecyclerView,显示一周的日期和月份,包括当前日期。并且它需要可滚动,当前日期应位于中心。我知道我需要 RecyclerView 的 Adapter 和 ViewHolder,但我不知道如何实现日期和月份。请帮帮我。

我需要实现这些

  • 自当前日期起过去 2 周
  • 当前日期
  • 从当前日期起未来 1 周

列表项日期.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data></data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="30dp">

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/text_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/ttnorms_medium"
            android:textColor="@color/white"
            android:textSize="60sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="12/31" />


    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

适配器.kt

class Adapter(private val data: ArrayList<Date>) : RecyclerView.Adapter<ViewHolder>() {

    private lateinit var binding: ListitemDateBinding

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        binding =
            DataBindingUtil.inflate(
                LayoutInflater.from(parent.context),
                R.layout.listitem_date,
                parent,
                false
            )
        return ViewHolder(binding)
    }

    override fun getItemCount(): Int =
        data.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        
    }

}

ViewHolder.kt

class ViewHolder (
    private val binding: ListitemDateBinding
) : RecyclerView.ViewHolder(binding.root){

    fun bind(date: Date){
        val currentDateTime = LocalDateTime.now()
        val format = SimpleDateFormat("M/d", Locale.US)
        val cal = Calendar.getInstance(Locale.US)

        val currentDate = Calendar.getInstance(Locale.US)
        val currentDay = currentDate[Calendar.DAY_OF_MONTH]
        val currentMonth = currentDate[Calendar.MONTH]


        binding.textDate.text = currentDateTime.toString()
    }

}
帖子版权声明 1、本帖标题:Kotlin 上的 RecyclerView 一周的日期和月份
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Andrey在本站《date》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我尝试使用 new Date() 显示当前 UTC 时间而不是当地时间。使用 (new Date()).toUTCString() 确实提供了 UTC 字符串,但我需要 UTC 对象,因为我需要将值传递给...

    我正在尝试使用新的Date()显示当前UTC时间而不是当地时间。

    使用 (new Date()).toUTCString() 确实提供了 UTC 字符串,但我需要 UTC 对象,因为我需要将值传递给其他库,因为库在内部将其转换为日期对象。因此,每次我将字符串包装到新日期中并将其转换为 UTC 时间时,它都会再次显示本地时间 +GMT+200 。有什么方法可以获取 +GMT000 日期对象,而不管我处于哪个时区?

    我正在尝试获取一个 new Date() 无论我处于哪个时区 +GMT000 始终返回的对象

  • 我有一个 Java 日期(星期五 6 月 28 日 10:00:01 GMT+01:00 2024),我想将其转换为 Epoch 毫秒以发送到后端。我尝试了以下操作:typealias Dates = java.util.Datefun Dates。

    我有一个 Java 日期( Fri Jun 28 10:00:01 GMT+01:00 2024 ),我想将其转换为 Epoch 毫秒以发送到后端。

    我尝试了以下方法:

    typealias Dates = java.util.Date
    
    fun Dates.toEpochMillis(timeZoneId: ZoneId): Long {
        val one = Instant.ofEpochMilli(time).toEpochMilli() // 1719565201000
        val three = secsToMillis(this.toLocalDateTime(timeZoneId).utcEpochSecs) // 1719568801000
        return one
    }
    
    fun Dates.toLocalDateTime(timeZoneId: ZoneId): LocalDateTime {
        return Instant.ofEpochMilli(time).atZone(timeZoneId).toLocalDateTime()
    }
    
    fun secsToMillis(timeInSecs: Long): Long {
        return timeInSecs * 1000
    }
    

    以上哪一项是正确的,或者您建议采用其他方法吗?

  • @Basil 同意,但 myJavaUtilDate.toInstant().toEpochMilli() 只是将 Instant 用作一个临时实例,并且仍然使用其中一个“非常有缺陷的遗留类”(恕我直言,并不比 myJavaUtilDate.getTime() 更好,这里不是指性能)

  • @user85421 是的,但教人们使用有严重缺陷的遗留课程会对他们不利。最好专注于现代替代课程。

  • 顺便说一下,两个日期类都提供了 getTime() 方法,该方法返回自 Unix 纪元以来的毫秒数 ||| ¹ java.sql.Date 扩展了 java.util.Date 并因此继承了其方法

  • @KlitosKyriacou Java 库有两个 Date 类。这种糟糕的命名选择是传统日期时间类的众多缺陷之一。请参阅 Javadoc。这个问题没有指出是哪个 Date 类。

  • 您所说的“两个 Date 类”是什么意思有点不清楚——我只看到问题中讨论了一个 Date 类。

  • 太长了;博士

    在 Java 语法中:

    long millisSinceEpoch = myJavaUtilDate.toInstant().toEpochMilli() ;
    

    细节

    我有一个 Java 日期

    不。

    这两个 Date 类都存在严重缺陷,几年前就被现代 java.time 类取代了。尽可能避免使用传统的日期时间类。

    如果您收到一个 java.util.Date <新code>对象,请立即转换为其替代对象: java.time.Instant 添加到旧类中的 to… / from… / 为 java.util.Date#toInstant .

    Instant instant = myJavaUtilDate.toInstant() ;
    

    以纪元毫秒为单位

    只需调用 Instant#toEpochMilli() .

    注意潜在的数据丢失,因为 Instant 可能包含微秒或纳秒。

    long millisSinceEpoch = instant.toEpochMilli() ;
    

    到本地日期时间

    这个课程 非常 你使用。

    切勿使用 LocalDateTime 时间线上的特定点。A LocalDateTime 故意缺少时区或 UTC 偏移量的上下文。因此此类 无法表示 moment 。A LocalDateTime 实际上只不过是一个带有时间的日期。因此,我们不知道该日期和时间是否应该使用挂钟/日历显示在日本东京的人、法国图卢兹的人或美国俄亥俄州托莱多的人——三个相隔几个小时的不同时刻。

    当您想要表示时间轴上的特定点时,请仅使用以下类: Instant , OffsetDateTime , 或 ZonedDateTime 。 (或非公历中的等价类,例如佛教历法或伊斯兰历法。)

  • java.util.Date 主要是对纪元毫秒值的包装,所以我们唯一需要做的就是获取它的包装值:

    myDate.time
    

    但是,正如其他人所说, Date 它是一个非常古老、过时且设计不佳的实用程序。理想情况下,您首先不应该使用它,而是使用更现代的替代方案,例如: Instant , ZonedDateTime 等。最接近的等价物 Date Instant .

    one 结果是正确的,但意义不大——我们 Instant 为给定的纪元创建只是为了取回它的纪元。 three 结果不正确。它是 UTC 日期的纪元 2024-06-28T10:00:01Z ,而不是 +1 偏移的纪元: 2024-06-28T10:00:01+01:00 .

  • 实际上只是一种更昂贵的调用 Date#getTime 的方式——基本上它执行 Instant.ofEpochMilli(date.getTime()).toEpochMilli() ( Instant 的两种方法甚至进行一些计算以将毫秒转换为秒和纳秒)

  • 你可以使用这个:

    fun Dates.toEpochMillis(): Long =
        toInstant().toEpochMilli()
    
  • Elin 2月前 0 只看Ta
    引用 13

    此外,在大多数情况下,我建议您不要使用自纪元以来的毫秒数将值传递给后端。让您的后端接受

返回
作者最近主题: