我是kotlin和android工作室的新手,我正试图在文本视图中显示这一天。我的问题是,只有数字1到7是根据当前日期显示的,但不是当天的名称,我要改变来解决这个问题吗?
val day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fun dayOfWeek() {
val day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK)
println(
when (day) {
1 -> "Sunday"
2 -> "Monday"
3 -> "Tuesday"
4 -> "Wednesday"
5 -> "Thursday"
6 -> "Friday"
7 -> "Saturday"
else -> "Time has stopped"
}
)
}
tag = findViewById(R.id.Tag)
tag.text = day.toString()
java.time
java.util
Date-Time API及其格式化APISimpleDateFormat
过时且容易出错。建议完全停止使用它们,切换到现代的Date-Time API*。
使用java.time
的解决方案,现代日期-时间API:有两种方法可以做到,如下所示:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// If you want to deal with the system timezone, you can simply use
// LocalDate.now() instead of LocalDate.now(ZoneId.systemDefault()). In order to
// deal with a specific timezone, replace ZoneId.systemDefault() with the
// applicable ZoneId e.g. ZoneId.of("Asia/Kabul")
LocalDate date = LocalDate.now(ZoneId.systemDefault());
String dow = date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println(dow);
// Alternatively,
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
dow = dtf.format(date);
System.out.println(dow);
}
}
<<p>在线演示/kbd>从Trail: Date Time了解更多关于现代Date-Time API的信息.
*如果你正在为一个Android项目工作,你的Android API级别仍然不兼容Java-8,检查Java 8+可用的API。注意Android 8.0 Oreo已经提供了对java.time
的支持。
在你的代码中,day
是一个Int属性。
您创建了一个名为dayOfWeek()
的函数,但您从未调用过该函数,因此代码永远不会运行。
当您执行tag.text = day.toString()
时,它正在查看day
属性,而不是函数内的day
变量。将变量命名为与同一类中的某些属性相同的东西通常是一个坏主意,因为这会使代码难以阅读。但在这种情况下,这都无关紧要,因为它们都是整型。
在您的dayOfWeek()
函数中,您使用when
表达式将day
转换为字符串,但您只是打印它。你没有将它存储在一个变量中,这样它就可以用于其他任何事情,比如在TextView上设置它。
你可以让你的函数返回一个String,并这样使用它。我还会将您的函数移到onCreate()
函数之外。对于这类任务,在另一个函数内部创建一个函数是不常见的。
val day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tag = findViewById(R.id.Tag)
tag.text = getDayOfWeekText()
}
fun getDayOfWeekText() {
return when (day) {
1 -> "Sunday"
2 -> "Monday"
3 -> "Tuesday"
4 -> "Wednesday"
5 -> "Thursday"
6 -> "Friday"
7 -> "Saturday"
else -> "Time has stopped"
}
}
或者用一种简单的方法,在适当的语言支持下:
tag.setText(DateTimeFormatter.ofPattern("EEEE").format(LocalDate.now()))