かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Azureで作ったDateTimeをSilverlightに渡すと・・・?

Azureは世界標準時なので日本から見ると9時間ずれた時間がとれるのは有名ですよね!んで、先日Silverlight側でDateTime.Nowしたらどうなるか試したところ、これはクライアントサイドで動いてるので日本の時間が取れました。

それでは、Azure側で作ったDateTimeをSilverlightに渡したら・・・?ということでやってみました。

こんな感じのDomainServiceを作ります。

namespace CloudSLApp.Web
{
    using System;
    using System.ComponentModel.DataAnnotations;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;

    [EnableClientAccess()]
    public class HelloDomainService : DomainService
    {
        public Person GetPerson()
        {
            // サーバーサイドでの時間を持ったオブジェクトを返す。
            return new Person();
        }
    }

    public class Person
    {
        public Person()
        {
            this.Birthday = DateTime.Now;
        }

        [Key]
        public int ID { get; set; }

        public DateTime Birthday { get; set; }
    }
}

Silverlight側はこんな感じ。

namespace CloudSLApp
{
    using System;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;
    using CloudSLApp.Web;

    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Hello world " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
            var ctx = new HelloDomainContext();
            ctx.Load(
                ctx.GetPersonQuery(),
                lo =>
                {
                    var p = lo.Entities.First();
                    MessageBox.Show(p.Birthday.ToString("yyyy/MM/dd HH:mm:ss"));
                },
                null);
        }
    }
}

ローカル時間を表示したあと、DomainContextからPersonオブジェクトを取得してBirthdayプロパティを表示しています。さて、結果はどうなるか・・・?


上がローカルの時間で下がサーバー側での時間をSilverlightへ運んだ値です。どちらも、日本時間になってるくさい・・・。Azureから転送した時間は9時間ずれると思ったのに・・・。はてさて、DateTimeの動ききちんと調べないとはまりそうだ・・・。