我正在尝试使用"2017-05-22"
将表示日期Date()
的字符串解析为SimpleDateFormat()
。我还需要用西班牙语进行日期转换,因此我要使用西班牙文配置来创建Locale
。问题是由于某种原因我仍然得到英语输出。我的手机的“语言和输入法”配置默认为英语,但我也尝试将其更改为西班牙语。这是完整的代码:
val localeSpanish = Locale("es", "ES")
val dateFormat = SimpleDateFormat("yyyy-MM-dd", localeSpanish)
val dateInSpanish = dateFormat.parse("2017-01-29")
我在输出中得到这个:
Wed Jan 11 00:00:00 GMT-04:00 2017
有人可以告诉我我在做什么错吗?
答案 0 :(得分:1)
正如其他人所述,当您输出dateInSpanish
时,您将暴露一个Date
实例,该实例正在调用其toString
方法,并且其实现会基于静态数组构造该字符串包含英文单词
//From java.util.Date
private final static String wtb[] = {
"am", "pm",
"monday", "tuesday", "wednesday", "thursday", "friday",
"saturday", "sunday",
"january", "february", "march", "april", "may", "june",
"july", "august", "september", "october", "november", "december",
"gmt", "ut", "utc", "est", "edt", "cst", "cdt",
"mst", "mdt", "pst", "pdt"
};
在声明dateFormatter时,它意味着要转换日期/字符串,如以下示例所示:
val dateFormatter = SimpleDateFormat("yyyy-MM-dd", localeSpanish)
println(dateFormatter.parse("2017-01-29")) // prints: Wed Jan 29 00:00:00 GMT-02:00 2017
println(dateFormatter.format(Date()) // prints: 2018-07-27 (as today :p)
我认为您应该使用其他掩码以获得格式化的字符串。 但是,如果您被迫以这种格式读取日期,则必须声明两个格式化程序:
val readerFormatter = SimpleDateFormat("yyyy-MM-dd", localeSpanish)
val writerFormatter = SimpleDateFormat("d 'de' MMMM 'del' yyyy", localeSpanish)
val readDate: Date = readerFormatter.parse("2017-01-29")
val dateInSpanish: String = writerFormatter.format(readDate)
println(dateInSpanish) // prints: 29 de enero del 2017 (as today :p)
答案 1 :(得分:1)
抱歉,我还不能写Kotlin。可以翻译成Java吗?
Locale localeSpanish = new Locale("es", "ES");
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)
.withLocale(localeSpanish);
LocalDate date = LocalDate.parse("2017-01-29");
String formattedDate = date.format(dateFormatter);
System.out.println("Fecha en español: " + formattedDate);
此打印:
西班牙文:2017年12月29日
消息:
SimpleDateFormat
和Date
早已过时且设计欠佳。 SimpleDateFormat
特别以麻烦而著称。尽管名称Date
代表一个时间点,而不是一个日期。而是使用现代Java日期和时间API java.time。LocalDate
类。yyyy-MM-dd
是ISO8601。现代类将ISO 8601解析为默认格式,即没有任何显式格式化程序。Date
还是LocalDate
,它们都没有格式或语言环境。它们只是以与int
保留没有任何格式或区域设置的数字相同的方式保留数据。无论您使用的是int
,Date
还是LocalDate
,如果要使用特定格式,则只能在String
中使用该格式。DateTimeFormatter.ofLocalizedDate
给您一个,但您需要将其转换为所需的语言环境。是的,java.time
在较新的Android设备上都能很好地工作。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 2 :(得分:0)
简单的Date
返回一个val dateString = dateFormat.format(dateInSpanish)
对象,该对象与格式无关。您要做的是打印以下内容:
if (isset($_GET['logout'])) {
session_destroy();
sesion_write_close();
header("Location: login.php");
exit();
}
答案 3 :(得分:0)
尝试将其用于日期表示和本地西班牙时间,请使用localSpanish val
Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy MMM dd - HH:mm:ss",*your code here*);
String formattedDate = df.format(c.getTime());
答案 4 :(得分:0)
该行:
val dateInSpanish = dateFormat.parse("2017-01-29")
不格式化日期,它只是从字符串中提取日期
线路:
val localeSpanish = Locale("es", "ES")
不更改手机的配置
所以你有个约会:dateInSpanish
然后您可以根据需要设置其格式,然后打印