我正在获取日历实例
import java.io.BufferedReader;;
import java.io.FileReader;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
/**
* Use {@link StringBuilder} to convert a `Character` list to {@code String}.
*/
public static String charactersToString(java.util.List<Character> chars)
{
StringBuilder sb = new StringBuilder(chars.size());
for (Character c : chars) {
sb.append(c.charValue());
}
return sb.toString();
}
/**
* Use {@link Stream} to convert {@code String} to a list of {@code chars}.
*/
public static java.util.List<Character> stringToCharacters(String text) {
return text.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
}
public static void main(String[] args)
{
java.io.File file = new java.io.File("file.txt");
java.util.List<String> content = new java.util.ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(file)))
{
String line;
while ((line = br.readLine()) != null)
{
/* Convert String to Character array so that
* it can be easily processed each char at a time
*/
java.util.List<Character> chars = stringToCharacters(line);
/*
* Check if ascii value of char matches ESC
*/
chars.removeIf(c -> (int)c == 27);
/*
* Add the processed line to a list that will later
* be used to write back to the same file
*/
content.add(charactersToString(chars));
}
/*
* Write all processed lines back to the same file
*/
java.nio.file.Files.write(file.toPath(), content);
}
catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
在一部手机中,星期六显示为周末,而在另一部手机中,星期日显示为周末 两台设备的时区相同
如果我将日历实例的语言环境设置为美国或任何其他国家/地区,则效果很好。 但是我不希望它保持不变。我希望它是区域性的,但在所有设备上都保持一致
如果时区相同,我希望两台设备上的周末相同
答案 0 :(得分:2)
一周的第一天(因此也是最后一天)因地区而异(而不是时区或GMT偏移量)。语言环境可以定义国家或地区和/或语言。语言无关(至少通常不相关),但国家/地区无关。例如巴基斯坦:
WeekFields wf = WeekFields.of(Locale.forLanguageTag("ur-PK"));
System.out.println("Last day of week is " + wf.getFirstDayOfWeek().plus(6));
输出为:
一周的最后一天是星期六
或者阿拉伯联合酋长国,因为您提到了海湾(我假设是波斯湾):
WeekFields wf = WeekFields.of(Locale.forLanguageTag("ar-AE"));
一周的最后一天是星期五
要使用默认语言环境,请指定Locale.getDefault()
:
WeekFields wf = WeekFields.of(Locale.getDefault());
由于我的语言环境是丹麦(欧洲),所以我现在得到Last day of week is SUNDAY
。
我正在使用Java.time(现代Java日期和时间API)的WeekFields
类。您正在使用的Calendar
类的设计很差,而且已经过时,现代API提供了更丰富的功能。
关于您所观察到的行为的可能解释包括:
Locale.setDefault
方法之一动态地更改JVM的语言环境设置。为了进一步解决此问题,我将从在每个设备上输出Locale.getDefault().getDisplayCountry()
开始。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 1 :(得分:1)
您可以尝试类似的事情。
Calendar sundayFirst = Calendar.getInstance();
sundayFirst.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
答案 2 :(得分:0)
您可以尝试
Calendar.getInstance().setFirstDayOfWeek(Calendar.SUNDAY);