我正在尝试将XMLGregorianCalendarObject转换为LocalDateTime,并且得到了异常的结果。 我已经尝试过Link to code和this post中的解决方案。
我在这里做一些假设,可能是我错了:
1)xmlDate参数为UTC
2)返回值为PST
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
GregorianCalendar gc = xmlDate.toGregorianCalendar();
ZonedDateTime zdt = gc.toZonedDateTime();
LocalDateTime localDate = zdt.withZoneSameInstant(ZoneId.of("America/Los_Angeles")).toLocalDateTime();
return localDate;
}
输出与输入完全相同:
XMLGregorianCalendar xmlDate:“ 2019-09-03T13:22:38.436-07:00”
LocalDateTime localDate:“ 2019-09-03T13:22:38”
此外,这不起作用(相同的方法,不同的语法):
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
ZonedDateTime utcZoned = xmlDate.toGregorianCalendar().toZonedDateTime().withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
LocalDateTime localDate = utcZoned.toLocalDateTime();
return localDate;
}
结果与第一个代码段相同。
我认为我的问题在withZoneSameInstant()方法中。 奇怪的是,当我在参数中输入其他时区代码时,会发生确实的转换。尝试与“太平洋/奥克兰”。
我在做什么错了?
答案 0 :(得分:3)
您的第一个假设是错误的:
1)xmlDate参数为UTC
class CustomAdapter (var mylist:ArrayList<User>)
:RecyclerView.Adapter<CustomAdapter.viewHolde>(){
val str= FirebaseStorage.getInstance().reference
var currentuser = FirebaseAuth.getInstance().currentUser!!.uid
var e = str.child(currentuser)
var c:Context?=null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): viewHolde {
var v=LayoutInflater.from(parent.context)
.inflate(R.layout.iktem_list,parent,false)
return viewHolde(v)
}
override fun getItemCount(): Int {
return mylist.size
}
override fun onBindViewHolder(holder: viewHolde, position: Int) {
holder.username.setText(mylist.get(position).username)
holder.userimage.setImageResource(R.drawable.user)
holder.title.setText(mylist.get(position).title)
holder.decription.setText(mylist.get(position).notes)
}
class viewHolde(item:View):RecyclerView.ViewHolder(item){
val username=item.findViewById(R.id.iduser)as TextView
val userimage=item.findViewById(R.id.idcircleImageView)as CircleImageView
val title=item.findViewById(R.id.idtitle)as TextView
val decription=item.findViewById(R.id.iddes)as TextView
}}
末尾的-07:00
是UTC的偏移量。偏移量与America / Los_Angeles时区(太平洋夏令时)一致。 Java可以识别这一点,因此当您转换为America / Los_Angeles时,它不会改变时间。当您转换为太平洋/奥克兰时,确实如此。
我相信您的代码是正确的。