我试图将日期转换为以下时区,但结果并不像预期的那样 - 我得到的要求就是说例如从 PMST 转换为 EST 输出应该少2小时。
PMST, NST, AST, 美东时间, CST, MST, 太平洋标准时间, 农业知识与科技, HAST
String inputDate = "2017/04/30 08:10";
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
LocalDateTime local = LocalDateTime.parse(inputDate, sourceFormatter);
ZonedDateTime zoned = local.atZone(TimeZone.getTimeZone("PMST").toZoneId());
ZonedDateTime requiredZone = zoned.withZoneSameInstant(TimeZone.getTimeZone("EST").toZoneId());
System.out.println(requiredZone);
输出 - 2017-04-30T03:10-05:00
答案 0 :(得分:2)
所以你知道你的输入"本地日期"在PMST时区。
config :my_app, MyApp.Endpoint,
live_reload: [
patterns: [
~r{../coherence/lib/.*(ex)$}, # THIS
~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
~r{priv/gettext/.*(po)$},
~r{lib/ammotion_web/views/.*(ex)$},
~r{lib/ammotion_web/templates/.*(eex)$}
]
]
但您应该注意到上述内容并未包含您所知道的时区信息。因此,您需要将该信息添加到String。
但我们现在所拥有的仅仅是String localDateTimeString = "2017/04/30 08:10";
,所以首先我们必须决定我们将使用的日期时间格式,并且必须知道TimeZone,
String
此处,DateTimeFormatter dateTimeWithZoneFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm Z");
表示TimeZone偏移量。我们知道Z
是PMST
,因此我们需要将此信息添加到我们的本地时间字符串中,
UTC-0300
现在,我们可以使用日期时间格式器
来阅读它String dateTimeString = "2017/04/30 08:10" + " -0300";
而且,现在我们可以在任何我们想要的时区获取日期,
ZonedDateTime dateTimeInPMST = ZonedDateTime.parse(dateTimeString, dateTimeWithZoneFormatter);
编辑1 ::
获取时区的偏移量(比如说ZonedDateTime dateTimeInEST = dateTimeInPMST.withZoneSameInstant(TimeZone.getTimeZone("EST").toZoneId());
)
EST
请注意int offsetInSeconds = TimeZone.getTimeZone("EST").getRawOffset() / 1000;
ZoneOffset zoneOffset = ZoneOffset.ofTotalSeconds(offsetInSeconds);
String zoneOffsetString = zoneOffset.toString();
// "-05:30"
中的这个:
,我们必须更改-05:30
以适应此情况,
DateTimeFormat
现在,您可以将其添加到任何dateTimeString,
DateTimeFormatter dateTimeWithZoneFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm ZZZ");
答案 1 :(得分:0)
这对我有用。修改需要哪个区域。
public class ZonedDateTime {
private static final String DATE_FORMAT = "dd/M/yyyy hh:mm:ss a";
public static void main(String[] args) {
String dateInString = "26/12/2017 10:15:55 AM";
LocalDateTime ldt = LocalDateTime.parse(dateInString, DateTimeFormatter.ofPattern(DATE_FORMAT));
ZoneId newYokZoneId = ZoneId.of("America/New_York");
ZonedDateTime nyDateTime =ldt.atZone(newYokZoneId);
System.out.println("Date (New York) : " + nyDateTime);
DateTimeFormatter format = DateTimeFormatter.ofPattern(DATE_FORMAT);
System.out.println("Date (New York) : " + format.format(nyDateTime));
}
}
使用此功能查找所有区域。
TreeSet<String> sortedZones = new TreeSet<>(ZoneId.getAvailableZoneIds());
for (String zone : sortedZones) {
System.out.println(zone);
}
答案 2 :(得分:0)
切勿使用媒体中常见的3-4个字母缩写,例如var musiclist = [MusicList]()
var player : AVPlayer?
var playerItem : AVPlayerItem?
var playButton : UIButton?
var isClicked : Bool = false
var songPostion : NSInteger = 0
var someValue : NSInteger = 0
var getsongPostion : NSInteger = 0
var getSongUrl : String?
var getArtistName : String?
var getSongName : String?
func playFunc(){
if getSongIndex.arrayurl.count > getsongPostion{
centerButton.isHidden = true
playButton?.isHidden = true
pauseButton.isHidden = false
let url = URL(string: getSongIndex.arrayurl[getsongPostion])
let playerItem:AVPlayerItem = AVPlayerItem(url: url!)
player = AVPlayer(playerItem: playerItem)
if player?.rate == 0
{
player!.play()
} else {
player!.pause()
}
songName.text = getSongIndex.arraysongname[getsongPostion]
artistName.text = getSongIndex.arrayartistname[getsongPostion]
}
}
,CST
和IST
。这些不是真正的时区,没有标准化,甚至不是唯一的(!)。
EST
相反,确定您想要的真实时区。 continent/region
格式为continent/region
,例如America/Montreal
和Africa/Casablanca
以及Pacific/Auckland
。
更改您的输入以符合ISO 8601标准格式。
String input = "2017/04/30 08:10".replace( " " , "T" ) ;
解析为LocalDateTime
,因为您的输入缺少从UTC或时区偏移的指示符。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
如果您确定要用于此输入,请应用时区。
ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = ldt.withZoneSameInstant( z ) ;